![](/img/trans.png)
[英]Java - Reflection. Set Value in the setter method multiple argument class object which are dynamically created
[英]Java - Reflection. Set value for the class object which are dynamically created
嗨,我有一个我在运行时动态创建对象的类[许多]。 现在我想为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的数组。
使用Field
可以找到其name
和type
,并完成所需的工作(如果其类型为==一些原始类型,则可以设置一些值)
本示例使用反射在类中的几个字段上设置默认值。 这些字段具有私有访问权限,可通过反射将其打开和关闭。 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注入。 您不需要知道属性名称,只需键入即可。 如下所示:
<bean id="myBean" class="myBean">
<constructor-arg type="int"><value>1</value></constructor-arg>
</bean>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.