JAVA 为什么在分配这些变量时会出现类型错误 (T extends Comparable<T>)

标签 java

所以,假设我们有这两个类。

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/

相关文章:

android - Android 上的 JRE

java - 在 GitHub 上显示 JavaDocs

java - catch block 中的多个语句

java - 来自相同包和不同包的 protected 方法调用之间的区别

java - 配置 weblogic.xml 以发送安全 JSESSIONID

java - netty tcp bytebuffer 服务器和客户端

java - 不从 MySQL 获取所有数据 (java)

java - JFrame 关闭操作

java - 如何使用 Java/JSP 或 javascript 通过互联网浏览器获取 Windows 用户名?

java - 如何获取WiFi网络接口(interface)的MAC地址?