可能重复:
如何在java中转换通用List类型?
当这是可行的
Number number = new Integer("");
Run Code Online (Sandbox Code Playgroud)
为什么不呢?
List<Number> list = new LinkedList<Integer>();
Run Code Online (Sandbox Code Playgroud)
这有助于:
http://www.ibm.com/developerworks/java/library/j-jtp01255.html
基本上,由于您声明了Number列表,因此API允许您在其中输入任何类型的Number,包括不是Integer的Number.
你快到了.Java中的类型参数既不是隐式协变也不是逆变 ; 也就是说,它们是不变的.您可以使用有界通配符来编写几乎相同的声明:
final List<? extends Number> number = new LinkedList<Integer>();
Run Code Online (Sandbox Code Playgroud)
鉴于您的列表在此处开始为空,并且您打算插入项目,您正在寻找协方差:即,您可以插入任何类型的项目Number,例如Integer.请注意,LinkedList构造函数打算将内容锁定以仅允许插入类型Integer,并且绑定引用number不再确切地知道Number该实际列表可以容纳的类型.number正如您所期望的那样,您可以获得协变读数:
final Number n = number.get(0);
Run Code Online (Sandbox Code Playgroud)
但是你不能插入一个,Number因为引用的类型不能保证要插入的元素和列表本身的声明类型之间的正确协方差.
number.add(new Integer(0));
Run Code Online (Sandbox Code Playgroud)
那个表达式不编译; 一个Integer是" 某种的Number",但它不能保证满足" 特定种类的Number,"这可能是,比方说,Double.