在here之前已经问过这个问题,但是解决方案显示的是“未选中投票”的警告。有没有更安全的方法来做到这一点。代码如下。
public abstract class Animal {
.
..
public class Dog extends Animal{
..
public Vector<Animal> myFunc(String[] args) {
// TODO Auto-generated method stub
Vector<Dog> arVector = new Vector<Dog>();
return (Vector<Animal>)(List<?>) arVector;
}
答案 0 :(得分:2)
这不安全,因为:
Vector<Dog> dogVector = new Vector<Dog>();
Vector<Animal> animalVector = (Vector<Animal>)(List<?>) dogVector;
animalVector.add(new Animal()); // seems to be ok, but...
Dog dog = dogVector.get(0); // Runtime exception - there's Animal, not Dog in your Vector.
编译器不允许使用不同的泛型类型转换类型是有原因的。您可以绕过此限制,但这可能会导致运行时出现严重问题(* ClassCastException * s)。
编辑:
问题是您必须返回带有动物的矢量,但您可以根据某些条件创建狗或猫的矢量。你能做的是:
public Vector<? extends Animal> myFunc(String[] args) {
Vector<Dog> vector = new Vector<Dog>();
// ...
return vector;
}
或:
public Vector<Animal> myFunc(String[] args) {
Vector<Animal> vector = new Vector<Animal>();
vector.add(new Dog());
return vector;
}