0

memberName という名前で Object オブジェクトの属性にアクセスしようとしています。

私は試した:

new PropertyDescriptor(memberName,object.getClass()).getReadMethod().invoke(object);

私のオブジェクトのほとんどの属性でうまく機能します。しかし、それらのいくつかはブール値であり、ゲッターは「getValid」ではなく「isValid」の形式であり、上記のコードは IntrospectionException エラーを生成します。

可能であれば、より多くのコード/外部ライブラリを使用せずに、これを機能させるために何ができますか?


編集 :

はい、申し訳ありませんが、私のクラスのメンバーの名前がおそらく適切に選択されていないことに言及するのを忘れていました。それはすでに「boolean isValid」であり、ゲッターも「isValid」です。

4

2 に答える 2

2

それは私にとってはうまく機能し、それがどのように機能するかが文書化されています:

getFoo および setFoo アクセサー メソッドを持つことにより、標準の Java 規則に従うプロパティの PropertyDescriptor を構築します。したがって、引数名が "fred" の場合、ライター メソッドは "setFred" であり、リーダー メソッドは "getFred" (またはブール プロパティの場合は "isFred") であると想定されます。プロパティ名は小文字で始める必要があることに注意してください。これはメソッド名で大文字になります。

(私のものを強調してください。)

サンプルコード:

import java.beans.*;

public class Test {

    public static void main(String[] args) throws Exception {
        Test test = new Test();
        PropertyDescriptor pd = new PropertyDescriptor("checked", Test.class);
        System.out.println(pd.getReadMethod().invoke(test));
    }

    public boolean isChecked() {
        System.out.println("isChecked called!");
        return true;
    }

    public void setChecked(boolean checked) {
    }
}

私のサンプル コードを試してみることをお勧めします。それが機能する場合は、私のコードとあなたのコードの違いを見つけられるかどうかを確認してください。

于 2013-03-07T14:26:59.497 に答える
0

アクセスしたい属性が公開されている場合は、次のように実行できます

object.getClass().getDeclaredField(name)

属性がプライベートの場合は、次の方法でアクセスできるようにアクセスできます。

object.getClass().getDeclaredField(name).setAccessible(true);   object.getClass().getDeclaredField(name);
于 2013-03-07T14:27:09.173 に答える