java - 重用扩展特定类的泛型类型 T

标签 java generics

我想使用包含类指定类型的元素的ArrayList

public class Foo<T extends Comparable<T>> extends AbstractFoo {

    private ArrayList<T> list =  new ArrayList<T>();

    @Override
    public void add(Comparable e) {
        list.add(e); // The method add(T) in the type ArrayList<T> is not applicable for the arguments (Comparable)
    }
}

为什么我无法将 e 添加到 list 中?由于 T 肯定扩展了 Comparable,我想我可以将 e 添加到 list 中。

最佳答案

假设您有一个类 Teacher和一个类Student两者都实现 Comparable 。现在,如果您创建 Foo<Teacher> ,这个 foo 对象将包含教师列表 ArrayList<Teacher> 。如果您的代码可以编译,您现在可以将学生(因为它是可比较的)添加到教师列表中,这当然是不允许的。

您可能实际上想要:

@Override
public void add(T e) {
    list.add(e); 
}

关于java - 重用扩展特定类的泛型类型 T,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41871429/

相关文章:

Java 扫描仪文件

Java 原始类型(例如 List 与 List<Object> )

java - 来自 Android Visualizer 的 FFT 数据取决于音量

java - 使用 LIUM 进行语音 Activity 检测 (VAD/SAR)

java - 如何在本地类中使用通用父类的类型参数?

c# - 为什么编译器不能解析这些泛型类型

java - Java 中具有两个泛型的方法

java - 网络不可达异常

generics - scala:如何创建一个通用类型,该通用类型是scala中所有数字类的子类型,以便它可以包含compare方法

c# - 使用泛型进行多重调度