我正在尝试使用具有泛型类型的 Java 函数接口(interface),但代码无法编译,我不明白为什么。这是代码的简化版本:
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;
}
}
错误已在代码中指出。关于我做错了什么的任何指示吗?
最佳答案
如果您实例化您的类,例如:
TestClass<Integer> t = new TestClass<>();
fun
的类型将是:
Function<List<Integer>, Integer>
你不能通过 List<Number>
到它的 apply 方法。
您可以更改:
List<Number> ln = new ArrayList<>();
至:
List<T> ln = new ArrayList<>();
消除错误。
关于java - 将 Java 泛型类型与函数式接口(interface)一起使用时出现编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52696125/