次のことを考慮してください。
class Mobile
{
}
class Android extends Mobile
{
}
class Iphone extends Mobile
{
}
次に、スーパークラス(モバイル)オブジェクトではなく、子クラスオブジェクトのみを受け入れるリストを作成する必要があります。
許可されている場合は、マーカー インターフェイスを追加できますListable
。
interface Listable {
}
class Mobile
{
}
class Android extends Mobile implements Listable
{
}
class Iphone extends Mobile implements Listable
{
}
次に、これを使用してリストを作成します。
List<Listable> list = new ArrayList<Listable>();
を確認するオーバーライドadd()
とaddAll()
メソッドobject.getClass().getSimpleName()
要するに、いいえ。
要するに、それは合理的ではありません。まず、追加したものが「参照」であることを知っておく必要があります。Mobile への参照は、Mobile、Iphone、または Android のインスタンスを指すことができます。インスタンスの実際のタイプで制限しますか、それとも参照のタイプで制限しますか?
インスタンスの実際のタイプによって制限します。
Mobile a = new Mobile();
Mobile b = new Iphone();
Mobile c = new Android();
aList.add(a); //reject
aList.add(b); //allow
aList.add(c); //allow
参照の種類による制限:
Mobile a = ...;
Iphone b = ...;
Android c = ...;
aList.add(a); //reject
aList.add(b); //allow
aList.add(c); //allow
最初のケースでは、リストを拡張していくつかのメソッド内でチェックを行うことができます (もちろん、型チェックはコンパイル時ではなく実行時に行われます)。
2番目のケースについては、合理的な方法で達成できるとは思いません