簡體   English   中英

帶有泛型類型的Java 8方法引用

[英]Java 8 Method reference with generic types

我遇到了Java 8方法引用與泛型類型相結合的問題。 我已經簡化了我的問題,以明確問題所在。 以下代碼失敗:

public static void main(String[] args) {
    new Mapper(TestEvent::setId);
}

private static class Mapper<T> {
    private BiConsumer<TestEvent, T> setter;
    private Mapper(BiConsumer<TestEvent, T> setter) { this.setter = setter; }
}

private static class TestEvent {
    public void setId(Long id) { }
}

但是,如果我將構造函數調用更改為

    BiConsumer<TestEvent, Long> consumer = TestEvent::setId;
    new Mapper(consumer);

一切正常。 有人可以解釋原因嗎?

我知道如果我刪除泛型類型(T)並使用Long代替它可行,但在解決我的實際問題時這不起作用。

目前你正在嘗試使用原始映射器類型,它會刪除所有類型的東西。

一旦你開始使用泛型類型,一切都很好 - 類型推斷可以幫助你:

new Mapper<>(TestEvent::setId);

添加<>就是編譯代碼所需的全部內容

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM