簡體   English   中英

在Java中調用通用方法:無法將Type轉換為通用參數T

[英]Calling generic method in Java: cannot convert Type to generic parameter T

我來自C#世界,在Java中使用泛型時遇到了麻煩。 由於某種原因,Java抱怨無法轉換我的類型。 這是我的代碼

public <T1, T2> ArrayList<T2> convert(List<T1> list, Function<T1, T2> function) {
            ArrayList<T2> result = new ArrayList<T2>();
            for (T1 source : list) {
                T2 output = function.apply(source);
                result.add(output);
            }
            return result;
        }

public SomeType convertSomeType(SourceType input){
    .....
    return ....
}

並稱之為:

List<SourceType> list...
SomeType result = convert(list, this::convertSomeType)

我在方法參考中得到錯誤的返回類型。 無法將SomeType轉換為T2。

我也嘗試像這樣指定通用參數:列表列表... SomeType結果= convert(列表,此:: convertSomeType)

但這沒有幫助。 我在這里做錯了什么?

您的方法返回一個ArrayList<T2> (我假設Tm是一個錯字),而不是T2

// Your version, doesn't work:
SomeType result = convert(list, this::convertSomeType)

// This works:
List<SomeType> result = convert(list, this::convertSomeType)

另外,您應該使convert()方法遵循PECS

public <T1, T2> ArrayList<T2> convert(
    List<? extends T1> list,
    Function<? super T1, ? extends T2> function
);

暫無
暫無

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

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