5

java.lang.Class には、指定された型が次のとおりかどうかをテストするメソッドがあります。

  • is注釈
  • isArray
  • isEnum
  • isInterface
  • isPrimitive

instanceof Classしかし、クラス型 ( is true) のオブジェクトが、インターフェイス、列挙型、プリミティブ、配列などではなく、宣言された非抽象クラスを表していることをどのようにテストしますか。例:

package org.acme;

public class ACME {

      public ACME() {

      }

      public static void main(String[] args) {
        Class clazz = Class.forName("org.acme.ACME");
       // Expected I could use a clazz.isClass().
      }
}

isClass メソッドを探していましたが、ありません。


アップデート

私の質問によって混乱が生じているのがわかりますが、私の質問を受け取った人もいます。

私はさらにいくつかの調査を行い、.NETでそれを発見しました

http://msdn.microsoft.com/en-us/library/system.type.isclass.aspx

これは isClass メンバーであり、java.lang.Class で同様のメソッドを探していました。

Java でこれに相当するのは、他のすべての isXXX メソッドをテストして、それがクラスではないことを確認することです。

4

5 に答える 5

6

あなたの質問には切断があるようです。すべてがクラスです (プリミティブを除く -isPrimitive()メソッドは実際にはクラスがオートボックス型であることを意味します)。

Class clazz = Class.forName("org.acme.ACME");
// Expected I could use a clazz.isClass().

それは冗長です。あなたはすでにそれがクラスであることを知っています。のインスタンスがあるためですClass

なんらかの理由で、リストしたメソッドが教えてくれるクラスのタイプではないことを知りたいようです。その場合は、単純にチェックを実行してそれらのオプションを否定します。

if (!clazz.isAnnotation() &&
    !clazz.isArray() /* && ... etc */ ) 
{

    // Not any of those things.

}
于 2013-06-19T17:46:18.287 に答える
2

部分的な解決策: クラスのnewInstanceメソッドの実行を試みることができます。クラスが抽象またはインターフェースのInstantiationException場合は、がスローされます。それ以外の場合は問題ありません。

問題は、未知のクラスに新しいインスタンスを作成すると未知の影響が生じる可能性があること、またはクラスにデフォルトのコンストラクターがない可能性があることです。

于 2013-06-19T17:53:30.023 に答える