Java -反射.为动态创建的类对象设置值



我有一个类[many],我在运行时动态地为它创建对象。现在我要设置字段which are private fields的值。如何设置它们

我看到过很多解释这个的例子,但是我们需要知道字段名,只有知道值才能设置。

对于我的例子,我有一组基本类型和非基本类型的默认值,并在运行时查找字段类型并为它们设置默认值。

例如:

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

我的情况是不同的,我甚至不知道field name,但必须根据字段类型设置默认值。

如何使用反射或在春天更好地做到这一点。

您可以输入yourBean.class.getFields();,它将给出字段数组。

使用Field,您可以找到它的nametype,并做所需的工作(设置一些值,如果它的类型是==一些基本类型)

这个例子使用反射为类中的几个字段设置默认值。这些字段具有私有访问权限,可通过反射打开或关闭。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
        }
    }
}

1)使用Spring构造函数/Setter注入。你不需要知道属性名,只需要type就可以了。如下所示:

<bean id="myBean" class="myBean">
  <constructor-arg type="int"><value>1</value></constructor-arg>
</bean>

相关内容

  • 没有找到相关文章

最新更新