0

クラス内でインスタンス化されたタイプ (インターフェース) の名前を取得しようとしていますが、試した利用可能なメソッドはタイプの実際の名前を返しません。

例:

名前を取得するには、次のようにします。

class Test {

    void test(Object o) {
        System.out.println(o.getClass());
    }

}

たとえば、java.lang.Runnable インターフェースを使用します。

...
test(new Runnable() {});

のようなものを出力class test.Test$2しますが、 Class クラスで他のメソッドを試しましたが、 null またはtest.Test. どうすればそこから抜け出すことができclass java.lang.Runnableますか?

ありがとう!

4

2 に答える 2

1

内部匿名クラスの場合、次のように実行できます。

void test(Object o) {
    if(o.getClass().isAnonymousClass()) {
      System.out.println(o.getClass().getInterfaces()[0].getName());
    } else {
      System.out.println(o.getClass().getName());
    }        
}
于 2014-04-11T16:33:16.577 に答える
0

instanceofチェックを行うだけでこれを行うことができます:

void test(Object o) {
    System.out.println(o instanceof Runnable);
}

これはtrue、オブジェクトが Runnable インターフェースを実装している場合に出力されます。

より動的なソリューションが必要な場合 (たとえば、 Object のすべてのインターフェイスを出力するo場合)、次のようにする必要があります。

void test(Object o) {
    for (Class i : o.getClass().getInterfaces()) {
        System.out.println(i.getName());
    }
}
于 2014-04-11T17:04:37.937 に答える