我正在使用BeanUtils来操作通过JAXB创建的Java对象,但我遇到了一个有趣的问题。有时,JAXB会创建类似于这样的Java对象:
public class Bean {
protected Boolean happy;
public Boolean isHappy() {
return happy;
}
public void setHappy(Boolean happy) {
this.happy = happy;
}
}
以下代码完全正常:
Bean bean = new Bean();
BeanUtils.setProperty(bean, "happy", true);
然而,尝试像这样获取 happy
属性:
Bean bean = new Bean();
BeanUtils.getProperty(bean, "happy");
导致此异常的结果:
Exception in thread "main" java.lang.NoSuchMethodException: Property 'happy' has no getter method in class 'class Bean'
改变所有内容为原始类型 boolean
可以使得get和set调用都有效。但是我无法这样做,因为这些是自动生成的类。我猜测这是因为Java Bean库仅将is<name>
方法视为属性,如果返回类型是原始类型boolean
而不是包装类型Boolean
。请问有没有人有关于如何通过BeanUtils访问这些属性的建议?是否有某种解决方法可用?
BeanUtils
类来自哪里?我已经检查过org.apache.commons.beanutils.BeanUtils
(1.8.3),它能正常工作。请注意,通常在boolean
上使用前缀is
,而在Boolean
上使用get
。 - Tomasz Nurkiewiczis
方法执行getProperty()
吗? - Charles HellstromgetProperty()
不能与Boolean is
一起使用。实际上,IntelliJ 为Boolean
生成带有get
的 getter 方法,而为boolean
生成带有is
的 getter 方法 - 我猜 Eclipse 也是这样做的。 - Tomasz Nurkiewicz