目标 :
设置类字段的值以及扩展类字段
例子 :
public class CreateRequisitionRO extends AbstractPortfolioSpecificRO {....}
我可以为正在扩展的值设置值,CreateRequisitionRO
但无法设置值。AbstractPortfolioSpecificRO
这就是我设置值的方式:
public Object creatObjectWithDefaultValue(String className) throws IllegalArgumentException, IllegalAccessException, InstantiationException {
Class<?> objectClass = null;
Object clsObject =null;
try {
objectClass = Class.forName(className);
clsObject = objectClass.newInstance();
Field[] fields = objectClass.getDeclaredFields();
for(Field f:fields){
if(!f.isAccessible()){
f.setAccessible(true);
Class<?> type = f.getType();
if(! Modifier.isFinal(f.getModifiers()) && type.equals(Integer.class)){
f.set(clsObject, DefaultParamValuesEnum.INTEGER.getDefaultInt());
} else if( !Modifier.isFinal(f.getModifiers()) && type.equals(java.math.BigDecimal.class)){
f.set(clsObject, DefaultParamValuesEnum.BIGDECIMAL.getDdefaultBigDecimal());
} else if(! Modifier.isFinal(f.getModifiers()) && type.equals(org.joda.time.LocalDate.class)){
f.set(clsObject,DefaultParamValuesEnum.DATE.getDefaultDate());
} else if(! Modifier.isFinal(f.getModifiers()) && type.equals(boolean.class)){
f.set(clsObject, DefaultParamValuesEnum.BOOLEAN.getDefaultBoolean());
} else if(! Modifier.isFinal(f.getModifiers()) && type.equals(java.lang.String.class)){
f.set(clsObject, DefaultParamValuesEnum.STRING.getDefaultString());
}
else if(! Modifier.isFinal(f.getModifiers()) && type.equals(long.class)){
f.set(clsObject,DefaultParamValuesEnum.LONGVALUE.getDefaultLong());
}
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return clsObject;
}
这就是我调用上述方法的方式:
classObject.creatJSONObject("com.hexgen.ro.request.CreateRequisitionRO");
上述方式为CreateRequisitionRO
扩展类中可用的非字段中的所有可用字段设置值。
如何设置?