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呼び出しは正常に機能し、2番目の呼び出しは正常に機能throwNoSuchMethodExeptionます。

私は何か愚かなものが欠けているのか、それとも本当にバグなのか知りたいです:)

4

4 に答える 4

6

このバグレポートを見てください

Java Bean 仕様のセクション「8.8 推測された名前の大文字化」では、最初の 2 文字が両方とも大文字でない限り、最初の文字が小文字に変換された場合、プロパティ名は「変更されない」と記載されています。

残りはあなたに合わせて調整します (イタリック体):

したがって、 「getADate」という名前の getter メソッドがある場合、これは「aDate 」ではなくプロパティ名「ADate」に変換されます。

したがって、問題を解決するには、次の 2 つの選択肢があります。

  • 代わりにプロパティ名「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 メソッドへのリンク

問題を解決するには、2 つの解決策:

  • 代わりにプロパティ名「ADate」を使用してください
  • アクセサー メソッド名を getaDate() および setaDate(Date dateToSet) に変更します。

Xaviが言ったように、それは報告されたバグです

于 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 に答える