0

Java ドキュメントをもう一度読むたびに混乱します。ですから、あなた自身の言葉で私を助けてください。

List<Parent> list = new ArrayList<Parent>();
//Child extends Parent...
list.add(new Child());
...
...
for(Parent p: list){
    if(p.getClass().isInstance(Child)){
            Child c = (Child) p;
            c.execFuncNonExistingInParent();
    }
}

キャストの問題を回避するために、親からのオブジェクトの継承を証明したいだけです。

if(p.getClass().isInstance(Child.class))

また

if(Child.class.isInstance(p.getClass()))

グレイティングス・オーケル

4

1 に答える 1

4

どちらの方法でもチェックしたいものをチェックしていません。あなたがしたい:

if (Child.class.isInstance(p))

これは次と同等です:

if (p instanceof Child)

...コンパイル時に修正されるのではなく、動的にチェックするクラスを指定できることを除いて。(例のように)コンパイル時にクラスがわかっている場合はinstanceof代わりに演算子を使用してください。

の場合isInstance、 と同等であると覚えておけばinstanceof、署名があるため、どちらの方向に進むかは簡単にわかります。

// In Class
public boolean isInstance(Object obj)

の同等物が必要な場合は、任意のオブジェクト参照にすることができobj instanceof clazz、クラスである必要があります...したがって、実際にはとして呼び出す必要があります。objclazzclazz.isInstance(obj)

于 2014-06-19T06:27:05.463 に答える