有没有办法可以用Java在通用集合中添加数据。 例如: -
import java.util.List;
import java.util.Vector;
public class testGenerics {
public static void main(String args[]) {
Vector<? extends Number> superNumberList = null;
// I can do this
Vector<Integer> subList = new Vector<Integer>();
subList.add(2);
superNumberList = subList;
// But i cannot do this
// Gives the below compilation error.
//The method add(capture#2-of ? extends Number) in the type
//Vector<capture#2-of ? extends Number> is not applicable for the arguments (Integer)
superNumberList = new Vector<Integer>();
superNumberList.add(new Integer(4));
superNumberList = new Vector<Float>();
superNumberList.add(new Float(4));
}
}
正如我在评论中提到的,当我尝试将一个Integer或Float数据添加到superNumberList时,我有编译错误。
我能够做到这一点,第一种方式,但是我想第二种方式,并且不确定为什么Java不允许我以第二种方式进行。
我有一个西装,我有一个超类,它有这个superNumberList,所有子类都试图使用这个相同的变量,但在这个集合中有不同的数据类型,如Integer,Float等。
答案 0 :(得分:3)
Vector<? extends Number>
是未知数字类型的向量。因此,您无法将任何内容添加到其中。
可能是Vector<Float>
。因此,您无法添加Integer
。
但它也可能是Vector<Integer>
。因此,您无法添加Float
。
你唯一知道的是,无论你拉出 out ,我都会Number
。
如果您的超类具有Integer
,Float
等的子类,那么您应该使超类具有通用性:
class SuperClassWithVector<T extends Number>{
protected Vector<T> myVector;
}
class FloatSubClass extends SuperClassWithVector<Float>{
// here myVector takes Float
}
如果您想要Vector
可以同时使用Integer
和Float
(不确定这是否是您想要的),那么您可以使用Vector<Number>
。
答案 1 :(得分:0)
您不需要使用? extends Number
:
Vector<Number> superNumberList = null;
...
superNumberList = new Vector<Number>();
superNumberList.add(new Integer(4));
superNumberList.add(new Float(4));