在here之前已经提出了这个问题,但是解决方案显示警告显示“未检查投射”。有没有更安全的方法来做到这一点。代码如下。将具体对象列表投射到抽象类型
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.
是有原因的,为什么编译器不会让你铸造类型具有不同的泛型类型:
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;
}
的可能重复[JAVA:铸造名单列出(http://stackoverflow.com/questions/11999364/java-casting -listanimal到listdog)。另请参阅:[列表是列表的子类吗?为什么不是Java的泛型隐含多态?](http://stackoverflow.com/questions/2745265/is-listdog-a-subclass-of-listanimal-why-arent-javas-generics-implicit?lq=1)。 –
2013-04-05 21:02:46