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

-java解析器

于 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 ,所以没有问题。您可能需要检查您要查找的字段的类型获得 first 的值。)

这就是你所追求的吗?

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 回答