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

2

你可以说yourBean.class.getFields();哪个会给出Field数组。

使用Field你可以找到它的nameand type,并做所需的工作(设置一些值,如果它的类型是 == 一些原始类型)

于 2013-04-29T08:55:05.290 回答
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 构造函数/Setter 注入。您不需要知道属性名称,只需键入即可。如下所示:

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