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按属性名称获取属性值的主要内容,如果未能解决你的问题,请参考以下文章