web-dev-qa-db-ja.com

BeanUtilsイントロスペクションを使用してJavaオブジェクトのすべての属性のリストを取得するにはどうすればよいですか?

POJOをパラメータとして取得するメソッドがあります。ここで、POJOのすべての属性をプログラムで取得し(コードが実行時にすべての属性を認識していない可能性があるため)、属性の値も取得する必要があります。最後に、POJOの文字列表現を作成します。

ToStringBuilder を使用できますが、要件に固有の特定の形式で出力文字列を作成したいと思います。

Beanutilsでそうすることは可能ですか!?はいの場合、メソッド名へのポインタはありますか?いいえの場合、独自のリフレクションコードを作成する必要がありますか?

13
Veera

ReflectionToStringBuilder を試しましたか?あなたが説明したことをするべきであるように見えます。

10
John Meagher

これは1年前の質問ですが、他の人にも役立つと思います。

このLOCを使用して部分的な解決策を見つけました

Field [] attributes =  MyBeanClass.class.getDeclaredFields();

これが実際の例です:

import Java.lang.reflect.Field;

import org.Apache.commons.beanutils.PropertyUtils;

public class ObjectWithSomeProperties {

    private String firstProperty;

    private String secondProperty;


    public String getFirstProperty() {
        return firstProperty;
    }

    public void setFirstProperty(String firstProperty) {
        this.firstProperty = firstProperty;
    }

    public String getSecondProperty() {
        return secondProperty;
    }

    public void setSecondProperty(String secondProperty) {
        this.secondProperty = secondProperty;
    }

    public static void main(String[] args) {

        ObjectWithSomeProperties object = new ObjectWithSomeProperties();

        // Load all fields in the class (private included)
        Field [] attributes =  object.getClass().getDeclaredFields();

        for (Field field : attributes) {
            // Dynamically read Attribute Name
            System.out.println("ATTRIBUTE NAME: " + field.getName());

            try {
                // Dynamically set Attribute Value
                PropertyUtils.setSimpleProperty(object, field.getName(), "A VALUE");
                System.out.println("ATTRIBUTE VALUE: " + PropertyUtils.getSimpleProperty(object, field.getName()));
            } catch (Exception e) {
                e.printStackTrace();
            }

        }
    }
}
17
Jorge Palacio

リフレクションを使用して、すべてのプロパティ/変数(名前のみ)を取得します。次に、 getProperty メソッドを使用して、その変数の値を取得します

3
Rakesh Juyal