Java 按属性名称获取属性值

2022-09-02 03:48:55

在Java中,是否可以通过其名称获取类属性值?例如,我有类像

public class Test {
    private String field;
    public String getField() {...}
    public void setField() {...}
}

和另一个带有地图的类

public class Main {
    private static final Map<String, Long> map = new HashMap<String, Long>();
    static {
        map.put("field", new Long(1));
    }
    public void doSth() {
    Set<String> keys = map.keySet();
    Test t = new Test();
    for (String key : keys) {
    //t.getPropertyValueByName(key); ?
    }
    }

答案 1

您可以使用一些提供基于属性的访问的库。我认为最知名和最常用的是豆豆。你可以在这里找到一个豆豆“在行动”的好例子。一些示例代码:

A someBean = new A();

// access properties as Map
Map<String, Object> properties = BeanUtils.describe(someBean);
properties.set("name","Fred");
BeanUtils.populate(someBean, properties);

// access individual properties
String oldname = BeanUtils.getProperty(someBean,"name");
BeanUtils.setProperty(someBean,"name","Barny"); 

答案 2

是的。您可以将注释掉的行替换为 t.getClass().getField(map.get(key)).get(t)。这将检索 t 上字段的值。