0

こんにちは、実行時にオブジェクトを動的に作成するクラス[多く]があります。ここで、フィールドの値を設定したいと思いますwhich are private fields。どのように設定しますか。

これを説明する多くの例を見てきましたが、フィールド名を知る必要があり、値を設定できるだけです。

私の場合、プリミティブ型と非プリミティブ型のセットのデフォルト値のセットがあり、実行時にフィールド型を見つけて、それらのデフォルト値を設定します。

例えば:

LoginBean loginBean = new LoginBean();
Method setUserName = loginBean.getClass().getMethod("setUserName", new Class[]{String.class});
setUserName.invoke(loginBean, "myLogin");

私の場合は異なり、field nameフィールドタイプに応じてデフォルト値を設定する必要があります。

リフレクションを使用してこれを行う方法、または春にさらに良い方法。

4

3 に答える 3

1

この例では、リフレクションを使用して、クラス内のいくつかのフィールドに既定値を設定します。フィールドにはプライベート アクセスがあり、リフレクションによってオンとオフが切り替えられます。 Field.set()setter メソッドを使用する代わりに、特定のインスタンスでフィールドの値を設定するために使用されます。

import java.lang.reflect.Field;
import java.util.Date;


public class StackExample {

    private Integer field1 = 3;
    private String field2 = "Something";
    private Date field3;

    public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException {
        StackExample se = new StackExample();

        Field[] fields = se.getClass().getDeclaredFields();

        for(Field f:fields){
            if(!f.isAccessible()){
                f.setAccessible(true);
                Class<?> type = f.getType();

                if(type.equals(Integer.class)){
                    f.set(se, 100); //Set Default value
                }else if(type.equals(String.class)){
                    f.set(se, "Default");
                }else if (type.equals(Date.class)){
                    f.set(se, new Date());
                }
                f.setAccessible(false);
            }
            System.out.println(f.get(se)); //print fields with reflection
        }
    }
}
于 2013-04-29T08:58:41.100 に答える
0

1) Spring コンストラクター/セッター インジェクションを使用する。属性名を知る必要はありません。入力するだけで済みます。次のように:

<bean id="myBean" class="myBean">
  <constructor-arg type="int"><value>1</value></constructor-arg>
</bean>
于 2013-04-29T08:59:29.857 に答える