[英]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.