リフレクションを使用して内部クラスのフィールド値を取得する

プラカール・アガルワル

リフレクションを使用して内部クラスのフィールド値にアクセスしようとしています。

クラスは次のとおりです。

public class OuterClass  {
    int a;
    public class InnerClass {
        int b;
        InnerClass(int b){
            this.b = b;
       }
    }

    public void setInnerField(int val){
        InnerClass a = new InnerClass(val);
    }
}

そして、主な機能は次のとおりです。

OuterClass obj = new OuterClass();
obj.a = 10;
obj.setInnerField(5);

以下は、私が内部クラスのフィールド値、つまり b を取得しようとしているものです。java でリフレクションを使用して内部クラス変数の値にアクセスするにどうすればよいですか?

Class[] classes = obj.getClass().getDeclaredClasses();     
for(Class innerClass: classes){
    //System.out.println(innerClass.getName());
    Field[] fields = innerClass.getDeclaredFields();
    for(Field field : fields){
        //System.out.println(field.getName());
        System.out.println(field.get(obj));  //<-----IllegalArgumentException    
//Tried with below line too as suggested in above link                                                                     
System.out.println(field.get(innerClass.getInterfaces())); //<-----IllegalArgumentException
    }           
}

では、実行時に内部クラスのフィールド値にアクセスする方法は何でしょう?

モハメド・ザキ

次の理由で、コードが IllegalArgumentException をスローします。

`System.out.println(field.get(obj));
 System.out.println(field.get(innerClass.getInterfaces()));// your inner class does not implement any interfaces which result in [] as an arg`

get メソッドに渡す obj arg は、get を呼び出すフィールド (この場合は OuterClass$InnerClass) を宣言するのと同じタイプである必要があります。b

これは get メソッドについてすでに文書化されています。

指定されたオブジェクトが、基になるフィールドを宣言するクラスまたはインターフェイスのインスタンスでない場合、メソッドは IllegalArgumentException をスローします。

内部クラスとそのフィールドを静的として宣言するか、内部クラスのインスタンスがあり、内部クラスのフィールドでそれを呼び出すときに、それを arg として field.get( innerInstance ) に渡します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

リフレクションを使用してフィールド値でクラスを取得する方法?

分類Dev

リフレクションを使用してフィールドの値を取得中に例外を取得する

分類Dev

リフレクションを使用して匿名クラスフィールドを取得する方法

分類Dev

リフレクションを使用して関連フィールドの値を取得する方法

分類Dev

リフレクションを介してJavaのクラスのpublic static finalフィールド/プロパティの値を取得する

分類Dev

文字列を使用して、リフレクションなしでscalaクラスのフィールド値を取得しますか?

分類Dev

リフレクションを使用して、C#でフィールドの値を取得します

分類Dev

リフレクションを使用してフィールドのジェネリック型を取得する

分類Dev

Kotlinリフレクション-クラスのすべてのフィールド名を取得する

分類Dev

リフレクションを使用して構造体のスライスフィールドに追加する

分類Dev

Golangリフレクションを使用して、スライスである構造体フィールドのタイプを取得する方法

分類Dev

リフレクションを使用してJava配列のフィールド「長さ」を取得する

分類Dev

リフレクションを使用して構造体フィールドの名前を取得する

分類Dev

リフレクションを介して不変のscalaクラスフィールドを変更する

分類Dev

リフレクションを使用してフィールド値を取得します。

分類Dev

Javaリフレクションを使用してリスト型のフィールドを反復する方法

分類Dev

リフレクションを介して特定のパブリックフィールドを取得します(すべての親クラスに対して)

分類Dev

リフレクションを介してJavaフィールドから文字列値を取得する方法

分類Dev

Kotlin、リフレクションを介してフィールド値を取得する方法

分類Dev

Javaリフレクション:内部インスタンス化フィールドを取得します

分類Dev

リフレクションを使用してタプルの値を取得する

分類Dev

リフレクションを使用してクラスの一時フィールドを取得できますか

分類Dev

Javaリフレクションを使用してScalaトレイトのプライベートフィールドを取得する

分類Dev

ジェネリック型のkotlinのリフレクションを使用して静的フィールドの値を取得します

分類Dev

リフレクションを使用してオブジェクトのフィールドの値にアクセスする方法

分類Dev

フィールドにクエリを実行してメインコレクションフィールドを取得し、クラウドファイヤーストアのサブコレクションドキュメントでサブコレクションを取得することはできますか?

分類Dev

Javaリフレクション:フィールドのクラスを取得する

分類Dev

非インスタンス化クラスのフィールドの値を取得します - リフレクション

分類Dev

EntityFramework 6リフレクションを使用してIDフィールドを取得する方法は?

Related 関連記事

  1. 1

    リフレクションを使用してフィールド値でクラスを取得する方法?

  2. 2

    リフレクションを使用してフィールドの値を取得中に例外を取得する

  3. 3

    リフレクションを使用して匿名クラスフィールドを取得する方法

  4. 4

    リフレクションを使用して関連フィールドの値を取得する方法

  5. 5

    リフレクションを介してJavaのクラスのpublic static finalフィールド/プロパティの値を取得する

  6. 6

    文字列を使用して、リフレクションなしでscalaクラスのフィールド値を取得しますか?

  7. 7

    リフレクションを使用して、C#でフィールドの値を取得します

  8. 8

    リフレクションを使用してフィールドのジェネリック型を取得する

  9. 9

    Kotlinリフレクション-クラスのすべてのフィールド名を取得する

  10. 10

    リフレクションを使用して構造体のスライスフィールドに追加する

  11. 11

    Golangリフレクションを使用して、スライスである構造体フィールドのタイプを取得する方法

  12. 12

    リフレクションを使用してJava配列のフィールド「長さ」を取得する

  13. 13

    リフレクションを使用して構造体フィールドの名前を取得する

  14. 14

    リフレクションを介して不変のscalaクラスフィールドを変更する

  15. 15

    リフレクションを使用してフィールド値を取得します。

  16. 16

    Javaリフレクションを使用してリスト型のフィールドを反復する方法

  17. 17

    リフレクションを介して特定のパブリックフィールドを取得します(すべての親クラスに対して)

  18. 18

    リフレクションを介してJavaフィールドから文字列値を取得する方法

  19. 19

    Kotlin、リフレクションを介してフィールド値を取得する方法

  20. 20

    Javaリフレクション:内部インスタンス化フィールドを取得します

  21. 21

    リフレクションを使用してタプルの値を取得する

  22. 22

    リフレクションを使用してクラスの一時フィールドを取得できますか

  23. 23

    Javaリフレクションを使用してScalaトレイトのプライベートフィールドを取得する

  24. 24

    ジェネリック型のkotlinのリフレクションを使用して静的フィールドの値を取得します

  25. 25

    リフレクションを使用してオブジェクトのフィールドの値にアクセスする方法

  26. 26

    フィールドにクエリを実行してメインコレクションフィールドを取得し、クラウドファイヤーストアのサブコレクションドキュメントでサブコレクションを取得することはできますか?

  27. 27

    Javaリフレクション:フィールドのクラスを取得する

  28. 28

    非インスタンス化クラスのフィールドの値を取得します - リフレクション

  29. 29

    EntityFramework 6リフレクションを使用してIDフィールドを取得する方法は?

ホットタグ

アーカイブ