所以,假设我们有这两个类。
public class Main<T extends Comparable<T>> {
public List<T> toList(T t){
Node n = new Node();
n.value = t; //This assignment1 gives no issues.
List<T> list = new List<T>();
list.add(n.value); //This assignment2 gives a type error.
return list;
}
}
class Node <T extends Comparable<T>> {
T value = null;
}
那么,为什么赋值 1 没有出现类型错误,而赋值 2 却给出了以下错误:
List中的add(T)不能应用于(java.lang.Comparable)
当我这样做时它就会消失:
list.add((T)n.value);
但我想先了解原因,看看上面的解决方案是否正确。
编辑:现在,我应该指定使用这些类的代码是 Integer 对象。因此,我作为开发人员可以假设 T 类型是相同的。但我不确定代码是否有一些可以在转换过程中更改值的底层例程。
最佳答案
Node n = new Node();
应该是
Node<T> n = new Node<T>();
如果您曾经引用Node
没有<something>
在它之后,您告诉编译器忽略 Node
上的所有类型检查 。这将向您发出警告,正如它应该的那样。
关于JAVA 为什么在分配这些变量时会出现类型错误 (T extends Comparable<T>),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40442850/