Java按属性名称获取属性值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java按属性名称获取属性值相关的知识,希望对你有一定的参考价值。

在Java中是否可以通过其名称获取类属性值?例如,我喜欢上课

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

另一个有Map的课程

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); ?
    }
    }
答案

您可以使用一些提供基于属性的访问的库。我认为最知名和最常用的是beanutils。你可以找到一个很好的beanutils“in action”here的例子。一些示例代码:

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"); 
另一答案

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

另一答案

bjc2406的答案可以正常工作,只要有问题的字段是可访问的:

t.getClass()。getfield命令(map.get(密钥))。得到(T)

如果您无法合理地公开它,反射和其他现场访问API应该完成工作:How do I read a private field in Java?

另一答案

问题是这些属性的变化频率如何?是常数,还是取决于具体情况?

如果是后一种情况(通常是这种情况),则需要外部文件中的属性。标准的java属性api非常适合:http://docs.oracle.com/javase/7/docs/api/java/util/Properties.html

如果你使用像spring这样的框架,那么它也会提供处理属性的标准方法。查看他们的文档。

另一答案

你也可以去找Properties.java类:http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html

它做同样的工作。

以上是关于Java按属性名称获取属性值的主要内容,如果未能解决你的问题,请参考以下文章

csharp 按属性名称获取对象的属性值

按名称从 ResultSet 中获取值

Java - 调用get方法时获取类属性名称

按名称分组的核心数据获取属性

java 遍历 类属性的属性值

java对象值的copy