我对PropertyUtils.getProperty(bean, fieldName)
方法有一个奇怪的问题,我得到了java.lang.NoShuchMethodException
。
假设我们有一个名为pojo的简单java类:
public class Pojo {
public java.util.Date aDate;
public java.util.Date theDate;
public Pojo(){}
}
和调用者类
public class TestPojo{
public static void main(String[] args){
Pojo p = new Pojo();
p.setADate(new Date());
p.setTheDate(new Date());
PropertyUtils.getProperty(p, "theDate");
PropertyUtils.getProperty(p, "aDate");
}
}
第一个PropertyUtils.getProperty
调用正常,第二个调用throw
NoSuchMethodExeption
。
我想知道我是否遗漏了一些愚蠢的东西,或者它确实是一个错误:)
答案 0 :(得分:6)
看看这个bug report
Java Bean规范在“8.8的资本化”一节中说明 推断名称“第一个字符转换为时的名称 小写,除非前两个字符都是大写,然后是 属性名称“未更改”。
为您调整其余部分(斜体):
所以当你有一个名为“getADate”的getter方法时,就是这样 翻译成属性名称“ADate”而不是“aDate”。
因此,要解决您的问题,您有两种选择:
- 使用属性名称“ADate”或
- 将您的方法名称更改为“getaDate”和“setaDate”
答案 1 :(得分:4)
我不明白PropertyUtils.getProperty(p, "TheDate");
如何工作,因为该属性的名称不正确。
试试这个:
public class TestPojo{
public static void main(String[] args){
Pojo p = new Pojo();
p.setADate(new Date());
p.setTheDate(new Date());
PropertyUtils.getProperty(p, "theDate");
PropertyUtils.getProperty(p, "aDate");
}
}
解决您的问题,有两个解决方案:
正如哈维所说,这是一个reported bug
答案 2 :(得分:2)
您可能需要使用:
PropertyUtils.getProperty(p, "ADate");
其中A在大写
答案 3 :(得分:1)
尝试
PropertyUtils.getProperty(p, "ADate");
而不是
PropertyUtils.getProperty(p, "aDate");