2017-03-24 1 views
3

インナーインスタンス化されたフィールドを取得します。Javaリフレクション:私はこのようになりますインターフェイス持って

public interface A { 
    public interface B { 
     public static final Cat cat = new Cat("Alice"); 
    } 
} 

を私は反射によって猫のオブジェクトにアクセスできる方法はありますか?

Field catField = Class.forName("A.B").getField("cat"); 

をしかし、それは私にClassNotFoundExceptionができます:

私はこれを試してみました。

ありがとうございます!

答えて

2

このための構文は次のとおりです。あなたが使用しなければならない

Field catField = Class.forName("com.xx.A$B").getField("cat"); 
System.out.println(catField.toString()); 

(あなたのパッケージ宣言が欠落しているかしていない場合、それは、それは追加する必要が続いている場合、私は、言うことができない)

+0

ありがとうございました!あなたが最初だったのでこれを受け入れる:) –

+1

あなたは歓迎です、他の答えは私の前に来ました。 – StuPointerException

3

Outer.Innerではなく、Outer$Innerの構文を使用する必要があります。

0

InterfaceName.class

Class cat; 
    try { 
     cat = A.B.class; 
     Field catField = cat.getField("cat"); 
    } catch (NoSuchFieldException e) { 
     e.printStackTrace(); 
    } catch (SecurityException e) { 
     e.printStackTrace(); 
    } 
関連する問題