在Java中调用泛型方法:无法将Type转换为泛型参数T.

时间:2016-12-12 20:56:22

标签: java generics

我来自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)

但它没有帮助。我在这里做错了什么?

1 个答案:

答案 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
);