2016-11-05 21 views
1

因此,假设我们有这两个类。JAVA为什么我在分配这些变量时遇到类型错误(T extends Comparable <T>)

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经历没有一个类型错误,而assignment2给了我以下错误:

在列表中添加(T)不能应用于(java.lang.Comparable的)

它消失了,当我做:

list.add((T)n.value); 

但我想先了解原因弄清楚,如果上述方案是正确的。

编辑:现在,我应该指定使用这些类的代码是Integer对象。所以,我作为开发人员可以假设T类型是相同的。但我不确定代码是否有一些可以在转换过程中更改值的基础例程。

回答

1
Node n = new Node(); 

应该

Node<T> n = new Node<T>(); 

如果曾经Node无后<something>,你告诉编译器忽略所有类型检查的Node。这会给你警告,因为它应该。

+0

它的工作原理,谢谢!因此,基本上,编写节点将使编译器检查类声明Node >中的T是否与Main >中的T相同? – Potatoman

+0

是的,这是正确的。 –

相关问题