java - 将 Java 泛型类型与函数式接口(interface)一起使用时出现编译错误

标签 java generics

我正在尝试使用具有泛型类型的 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/

相关文章:

java - 如何修复 'android.os.NetworkOnMainThreadException' ?

Java 泛型 - 不能应用于给定类型

java - 如何删除Java中枚举和泛型的重复源代码?

java - Kotlin 生成通用 java 代码

Java错误: Unreported exception?

java - 如何在不使用许多语句的情况下进行 SQL 查询来测试许多通配符 id

java - assertThrows 多个异常

java - 由于构造函数中的静态类,Mockito 无法使用 @InjectMocks 创建实例

java - 如何使用Stanford Parser使用java获取POS标签?

java - 使用泛型的可重用接口(interface)