6

我的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电话工作正常,第二个电话throwNoSuchMethodExeption.

我想知道我是否遗漏了一些愚蠢的东西或者它真的是一个错误:)

4

4 回答 4

6

看看这个错误报告

Java Bean 规范在“8.8 推断名称的大写”部分中指出,当第一个字符转换为小写时,除非前两个字符都是大写,那么属性名称是“不变的”。

为您调整其余部分(斜体):

因此,当您有一个名为"getADate"的 getter 方法时,它会被转换为属性名称"ADate"而不是"aDate"

因此,要解决您的问题,您有两种选择:

  • 改用属性名称“ADate”
  • 将您的方法名称更改为“getaDate”“setaDate”
于 2011-09-23T13:20:47.303 回答
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");
    }
}

链接到PropertyUtils 方法

为了解决您的问题,有两种解决方案:

  • 改用属性名称“ADate”
  • 将访问器方法名称更改为 getaDate() 和 setaDate(Date dateToSet)

正如哈维所说,这是一个报告的错误

于 2011-09-23T13:17:18.717 回答
2

尝试

PropertyUtils.getProperty(p, "ADate");

代替

PropertyUtils.getProperty(p, "aDate");
于 2011-09-23T13:08:12.180 回答
2

可能您需要使用:

PropertyUtils.getProperty(p, "ADate");

其中 A 大写

于 2011-09-23T13:11:03.243 回答