将Java泛型类型与函数接口一起使用时发生编译错误
我试图使用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
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<>();