4

Javaリフレクションについて質問があります。

Javaクラスの特定のフィールドの名前を取得するための何らかの方法が必要です。このように機能するもの:

class X{
   int x;

   String getNameOfProperty(Object o){
         ....
   } 
}

次に、呼び出すとき

System.out.println(getNameOfProperty(x));

「x」を取得したい。

を使用してクラスのフィールドを取得することができました

X.class.getDeclaredFields();

しかし、プロパティとそれに関連付けられたFieldオブジェクトの間にリンクはありません。

4

3 に答える 3

3

この目的のために抽象構文木を使用することができます。Eclipseの場合、詳細はここにあります

以下もご利用いただけます

-ANTLR _

-javaparser _

于 2012-09-07T12:36:05.480 に答える
1

ここで何を聞きたいのかは本当にはっきりしていません。

私があなたの質問を正しく理解していればField、Javaのクラスを使用すると、実行時にそのフィールドのオブジェクトの値を取得できます。getDeclaredFieldsあなたを返しますField[]

http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/reflect/Field.html

チェックget(Object o)方法

指定されたオブジェクトで、このフィールドによって表されるフィールドの値を返します。プリミティブ型の場合、値は自動的にオブジェクトにラップされます。

于 2012-09-07T12:42:20.233 に答える
0

java.lang.reflect.FieldクラスでgetName()を使用できると思います。あなたはあなたの質問のあなたのコードですでにたくさんのフィールドを持っています

このコードをcore.Test1クラスで検討してください。fieldNameを呼び出すと、「i」と「d」、42と6が返されます(ここでgetDoubleを使用したわけではなく、intはDbouleに収まるため、問題はありません。対象のフィールドのタイプを確認する必要がある場合があります。最初の値を取得します。)

それはあなたが求めているものですか?

private int i = 42;
private double d = 6.0d;

@Test
public void test() {
    try {
        Class<?> clazz = Class.forName("core.Test1");

        Field[] fieldlist = clazz.getDeclaredFields();
        for (int i  = 0; i < fieldlist.length; i++) {
           System.out.println("field name = " + fieldlist[i].getName());
           System.out.println("value = " + fieldlist[i].getDouble(this));
           System.out.println("field type  = " + fieldlist[i].getType());
           System.out.println("modifiers = " +  Modifier.toString(fieldlist[i].getModifiers()));
        }
      }
      catch (Throwable e) {
         System.err.println(e);
      }
}           
于 2012-09-07T12:44:46.910 に答える