public static void main(String[] args) throws Exception {
String s = "0";
Ref ref = new Ref();
Field[] fields = ref.getClass().getDeclaredFields();
for (Field field : fields) {
int modifiers = field.getModifiers();
if (Modifier.isFinal(modifiers))
continue;//final不做处理
if (field.getType().getName().contains("enum"))
field.set(ref, Senums.valueOf(s));//其他字段类型另作处理
field.setAccessible(true);//打破封装
Object o = getObjectField(field, s);
field.set(ref,o);
}
System.out.println(ref);
}
@SuppressWarnings("unchecked")
public static Object getObjectField(Field field,String valueStr) throws Exception {
Class typeClass = field.getType();
Constructor con = typeClass.getConstructor(valueStr.getClass());//获取有参构造函数
Object obj = con.newInstance(valueStr);//构造函数做初始化
return obj;
}
String,Long,Interger都成功赋值,如果对象里有其他类型字段要另作处理,如enum类型
typeClass.getConstructor(String.class) 此处获取的有参构造方法,在Boolean,Long,Interger源码中对应