コードは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)を強制する必要はありませんなぜ私の質問です。 ThingContainerとそれに含まれるものはa.shingのサブクラスですか?
これはあなたの質問に答えると思います。 http://stackoverflow.com/q/6044329/422353 – madth3
+1よく書かれた質問です。最初に回答を検索しない場合は-1です。 net:0 –
Thanks @ madth3、はい、特に –
TimP