3

インスタンスのクラスを取得する最良の方法は何ですか?

推奨される方法は何ですか? との違い(パフォーマンス)は何ですか:

  • クラスを比較する

if( this.getClass().equals(MyClass.class) ){this.getClass() == MyClass.class これは(またはおそらくを使用して Class.forName("com.test.MyClass")) と同じようです

  • のインスタンスをテストします(より読みやすいようです)

    if( this instanceof MyClass ){
    
  • クラスを使用してインスタンスをテストする

    if( MyClass.class.isInstance(myInst) ){
    
4

2 に答える 2

2

StringクラスはObjectのサブタイプであるため、trueを生成するthis.getClass().equals( MyClass.class)ため、クラスを正確に一致させたい場合にお勧めします。"someString" instanceOf Object

is aこれは、インスタンスとクラスの間の関係をチェックしています。

あなたの場合、のサブクラスMyClassは生成されますtrue

  1. instanceof左側のものが右側の型のインスタンスであるか、何らかのサブタイプであるかをテストします。
  2. getClass() == ...タイプが同一かどうかをテストします。
于 2012-07-18T13:55:37.217 に答える
1

オプション 1 は、クラスが正確にテストしているものであるかどうかのみを示します。これは通常、あまり役に立ちません。たとえば、インターフェイスにはまったく意味がありません。これが実際にやりたいことである場合は、==さまざまな をいじっていない限り、おそらく使用できます。その場合、各オブジェクトClassLoaderのインスタンスが複数ある可能性があります。Class

オプション 2 は、オブジェクトが特定のクラスに静的に割り当て可能 (つまり、それにキャスト可能) かどうかを示します。

オプション 3 は 2 と同じですが、リフレクション APIを使用します。これは、動的型付けを行う場合にのみ必要です。ビルトインのinstanceof方が読みやすく、はるかに効率的です。

于 2012-07-18T13:58:12.490 に答える