代碼也是在https://github.com/timp21337/java-generics-example爲什麼在Java中不允許將子類對象的子類集合轉換爲超類對象的超類集合?
package a;
import java.util.List;
public interface Container<T> {
List<T> getThings();
}
public class ContainerContainer {
public Container<Thing> getThingContainer() {
return new ThingContainer<Thing>();
}
}
public class ThingContainer<T extends a.Thing> implements Container<T> {
@Override
public List<T> getThings() {
return null;
}
}
public class Thing {
}
套餐B
package b;
import java.util.List;
public class ContainerContainer extends a.ContainerContainer {
ThingContainer<Thing> thingContainer = new ThingContainer<Thing>();
@SuppressWarnings("unchecked")
public a.Container<a.Thing> getContainer() {
return (a.Container<a.Thing>)(Object)thingContainer; //YUCK
}
}
public class ThingContainer<T extends a.Thing>
implements a.Container<T> {
@Override
public List<T> getThings() {
return null;
}
}
public class Thing extends a.Thing {
}
我的問題是,爲什麼我有要挾b.ThingContainer(上面注YUCK)當它的一個子類。 ThingContainer和它包含的東西是a.Thing的子類?
我認爲這回答你的問題。 http://stackoverflow.com/q/6044329/422353 – madth3 2012-03-23 00:14:56
+1爲一個寫得很好的問題; -1不先搜索答案;淨:0 – 2012-03-23 01:02:24
謝謝@ madth3,是特別是鏈接到 –
TimP
2012-03-23 10:19:37