我来自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)
我在方法引用中得到Bad return类型。无法将SomeType转换为T2。
我也试过像这样指定泛型参数: 清单清单...... SomeType result = convert(list,this :: convertSomeType)
但它没有帮助。我在这里做错了什么?
答案 0 :(得分:1)
您的方法返回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
);