6

特定のカスタムアノテーションでマークされていないプライベートフィールド値を抽出したいのですが、これはBeanUtilsを介して可能ですか?はいの場合、どのように?

4

2 に答える 2

2

はい、フィールド名を知っていると仮定します。使用できますPropertyUtils.getSimpleProperty(...)例については、こちらも参照してください。

于 2011-05-25T10:21:02.177 に答える
2

いいえ、BeanUtils ではできません。ただし、Java 独自のリフレクション ツールを次のように使用できます。

public class BeanUtilTest {
    public static void main(String[] args) throws ... {
        MyBean bean = new MyBean();

        Field field = bean.getClass().getDeclaredField("bar");
        field.setAccessible(true);
        System.out.println(field.get(bean));
    }

    public static class MyBean {
        private final String bar = "foo";
    }
}

考慮してください: リフレクションを使用してプライベート フィールドにアクセスすることは、非常に不適切なスタイルであり、テストのため、または他に方法がないことが確実な場合にのみ実行する必要があります。アクセスしようとしているクラスのソースを変更できない場合は、最後の手段かもしれません。ただし、将来的に動作が変更され (使用しているライブラリの更新など)、コードが壊れる可能性があることを考慮してください。

編集: BeanUtils または PropertyUtils が機能している場合、これはこのプロパティの公開ゲッターが存在することを意味し、リフレクションを使用する代わりにそれを使用する必要があります。パブリック ゲッターを使用せずにプライベート フィールドで PropertyUtils を使用すると、NoSuchMethodException がスローされます。

于 2011-05-25T10:30:34.103 に答える