次のコードを検討してください。
interface IFace {}
abstract class Supertype {}
class Subtype1 extends Supertype implements IFace {}
class Subtype2 extends Supertype implements IFace {}
class Subtype3 extends Supertype {}
class Foo {
//Contains elements of Subtype1 and Subtype2
List<IFace> ifaceList = new ArrayList<IFace>();
//Contains elements of Subtype1, Subtype2, and Subtype3
List<Supertype> superList = new ArrayList<Supertype>();
void CopyItem() {
superList.add( (Supertype) ifaceList.someElement() );
}
}
サブタイプのみが実装されることがわかっている場合、IFace
要素をキャストしても安全ですか? サブタイプのみが実装されることを保証することさえ可能ですか?Supertype
IFace
IFace
IFace
最初のリストに特定のサブタイプのみを保持し、2 番目のリストに任意のサブタイプを許可するためのマーカー インターフェイスとして使用しようとしています。