将Java泛型类型与函数接口一起使用时发生编译错误

将Java泛型类型与函数接口一起使用时发生编译错误,java,generics,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 vo

我试图使用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;
    }
}
import java.util.ArrayList;
导入java.util.List;
导入java.util.function.function;
公共类TestClass{
功能乐趣;
公共void testFun(列表x){
List ln=new ArrayList();
fun.apply(ln);//错误:不兼容的类型:无法将列表转换为列表
testApply(ln);//这与上面的代码类似,但编译得很好
}
公共整数测试应用程序(列表x){
返回0;
}
}

代码中指出了错误。有关于我做错了什么的指示吗?

如果您实例化类,例如:

TestClass<Integer> t = new TestClass<>();
并且不能将
列表
传递给它的apply方法

您可以更改:

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

List ln=new ArrayList();
以消除错误

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