使用Java 6 SE,我有一个包含Vector的类。有一个类方法可以简单地调用包含Vector的addAll()方法,并为每个方法使用相同的参数。向量可以是类型"超类"或类型"子类",我希望addAll()方法支持两者。整个设置可能像这样:
public class VectorAContainer(){
this.vectorA = new Vector<Superclass>();
}
public void addAll(Vector<Superclass> vector){
this.vectorA.addAll(vector);
}
然后像这样调用一行代码:
VectorAContainer container = new VectorAContainer();
container.addAll(vectorB); //where vectorB is a Vector<Subclass>
问题是,Eclipse给出以下错误:
"类型中的addAll(Vector
)方法VectorAContainer不适用于参数(Vector<Subclass>)。">
奇怪的是,我发现addAll()工作,如果它不是一个类的内部:
//No container with an addAll(), calling directly on vectorA
this.vectorA.addAll(vectorB); //No errors!
我看不出上面两种情况有什么区别。我想用第一种方法,因为我有一个更复杂的类,它包含一个像上面那样的向量。我将非常感谢你们所有人提供的任何帮助!
您需要接受协变泛型参数:
public void addAll(Collection<? extends Superclass> c)
您可以在addAll
:
的声明中看到这一点。boolean addAll(Collection<? extends E> c)
这是因为Superclass是一个下界注释,意味着类是Super to Vector。如果vectorB是Vector的子类,那么它将不起作用。AbstractList和AbstractCollection是Vector的超类。我相信你想用。public void addAll(Vector<? extends Vector> vector){
vectorA.addAll(vector);
}
注:Vector是一个过时的类。如果你不需要线程安全的实现,你应该使用ArrayList。
* P.P.S.你不需要使用"this",除非你有两个同名的变量(例如
)。 private Variable variableA;
public void example(Variable variableA){
this.variableA = variableA;
}