【发布时间】:2012-03-23 11:02:32
【问题描述】:
代码也在https://github.com/timp21337/java-generics-example
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)当它是 a.ThingContainer 的子类并且它包含的东西是 a.Thing 的子类时?
【问题讨论】:
-
我认为这回答了你的问题。 stackoverflow.com/q/6044329/422353
-
+1 表示写得很好的问题; -1 表示不先搜索答案;净:0
-
谢谢@madth3,是的,特别是en.wikipedia.org/wiki/…>的链接
-
谢谢@Jim-Garrison,我确实搜索过,但我找到的答案是相反的问题