有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

类java反射如何获取特定属性的名称

我有一个关于java反射的问题

我需要某种方法来获取java类中特定的字段的名称。类似这样的东西:

class X{
   int x;

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

那么,打电话的时候,

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

我想得到“x”

我已经设法使用

X.class.getDeclaredFields();

但是在属性和与之关联的字段对象之间没有任何链接


共 (3) 个答案

  1. # 1 楼答案

    我认为可以在java中使用getName()。朗。反思。野战课。在您的问题中,您的代码中有很多字段

    在内核中考虑此代码。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);
          }
    }           
    
  2. # 2 楼答案

    现在还不清楚你想问什么

    若我正确理解了您的问题,java中的Field类允许您在运行时获取该字段的对象值getDeclaredFields返回您Field[]

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

    检查get(Object o)方法

    Returns the value of the field represented by this Field, on the specified object. The value is automatically wrapped in an object if it has a primitive type.

  3. # 3 楼答案

    为此,可以使用抽象语法树。对于Eclipse,您可以找到详细信息here

    您还可以使用以下命令

    -ANTLR

    -javaparser