通过功能接口使用Java泛型类型时发生编译错误

时间:2018-10-08 05:52:44

标签: java generics

我正在尝试使用具有泛型类型的Java功能接口,但是代码无法编译,我不知所措。这是代码的简化版本:

import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;

public class TestClass <T extends Number> {

    Function<List<T>, Integer> fun;

    public  void testFun (List<T> x) {
        List<Number> ln = new ArrayList<>();
        fun.apply(ln);     // error: incompatible types: List<Number> cannot be converted to List<T>
        testApply(ln);     // This is similar to the code above, but compiles fine
    }

    public <M extends Number> Integer testApply(List<M> x) {
        return 0;
    }
}

该错误在代码中指示。关于我在做什么错的任何指示?

1 个答案:

答案 0 :(得分:2)

例如,使用以下方法实例化课程:

TestClass<Integer> t = new TestClass<>();

fun的类型为:

Function<List<Integer>, Integer>

您不能将List<Number>传递给它的apply方法。

您可以更改:

List<Number> ln = new ArrayList<>();

收件人:

List<T> ln = new ArrayList<>();

消除错误。