2013-07-04 7 views
16

私は方法があります。今、私はリフレクションを使用してstrValueに実際の文字列値を抽出んかJavaフィールドから文字列値を取得するにはどうすればいいですか?

Field name: java.lang.String 

:これは私のような出力を得る実行すると

public void extractStringFromField(Class<?> classToInspect) { 
    Field[] allFields = classToInspect.getDeclaredFields(); 

    for(Field field : allFields) { 
     if(field.getType().isAssignableFrom(String.class)) { 
      System.out.println("Field name: " + field.getName()); 

      // How to get the actual value of the string?!?! 
      // String strValue = ??? 
     } 
    } 
} 

を?

+0

すべきではありませんか? 'System.out.println("フィールド名: "+ field.getName()); ' –

+0

はい - nをペーストしたときにエラーが発生しました。 –

+1

あなたはどのフィールドの値を取得したいですか?どのオブジェクトですか? –

答えて

24

クラスのインスタンスへの参照が必要なようです。 getに電話して参照を渡し、戻り値を文字列にキャストします。

次のようにあなたが得る使用することができます。理想的な状況では

String strValue = (String) field.get (objectReference); 
+0

フィールドが静的であっても参照を渡す必要があることは、APIの残念な側面です。 – Owen

+9

'null'を渡すことができます。 –

+0

素晴らしい、良い点。私はJavaからあまりにも長い時間を費やしました。 – Owen

5

を、Classは、データを保持していません。単にそのインスタンスの構造と振る舞いについての情報を保持しており、Classesのインスタンスでは、使用するデータが保持されています。したがって、実際に値を抽出する場所からインスタンスを渡さない限り、extractStringFromFieldメソッドは値を抽出できません。

参照のパラメータの名前は、あなたが値を抽出するために渡していることinstanceある場合は、簡単にあなたが怒鳴るように欲しいものを得ることができます。

String strValue = (String)field.get(instance); 
1

反射フィールドのためだけ便利なコード例:

Field[] fields = InsanceName.getDeclaredFields(); 
for (Field field : fields) {  //array for fields names 

System.out.println("Fields: " + Modifier.toString(field.getModifiers())); // modyfiers 
System.out.println("Fields: " + field.getType().getName()); //type var name 
System.out.println("Fields: " + field.getName());  //real var name 
field.setAccessible(true);        //var readable 
System.out.println("Fields: " + field.get(InsanceName)); //get var values 
System.out.println("Fields: " + field.toString());  //get "String" values 
System.out.println(""); //some space for readable code 
} 
関連する問題