2

と呼ばれる基本クラスclass Baseと2つの子クラスがあります

class A extends Base

class B extends Base

にメソッドfooがありBaseます。

との実装fooを入れるのではなく、私ができるようにclass Aclass B

void foo (Object o)
{
    // A's implementation
    assert o instanceof A;     
}


 void foo (Object o)
 {
     // B's implementation
     assert o instanceof B; 
 }

とにかくfooBaseに入れても、まだランタイムクラスをチェックできますか? 私は次のようなことを考えました:

 void foo (Object o)
 {
    // Check that o is instanceof a runtime class
    assert o instanceof this.getClass(); // ????
 }

ありがとう。

4

5 に答える 5

1

instanceofパラメータを「動的」にすることはできないため、機能しません。

isInstance次の方法を使用できますClass

void foo (Object o)
{
    // Check that o is instanceof a runtime class
    assert getClass().isInstance(o);
}

ただし、これには少なくとも 1 つの問題が考えられます。 が のサブクラスのインスタンスであり、オブジェクトが!の直接のインスタンスである
場合、AssertionException が発生します。thisAA

于 2012-06-18T15:22:18.070 に答える