当 Vector 位于包含类中时,使用 Vector 的 addAll( ) 函数时出现问题



使用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&gt)。">

奇怪的是,我发现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;

}

最新更新