在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