【发布时间】:2013-04-24 03:20:36
【问题描述】:
目标:
设置类字段以及扩展类字段的值
示例:
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中可用的所有字段设置值,而不是扩展类中可用的字段。
如何设置?
【问题讨论】:
-
您应该将此检查包裹在其他检查周围:
if(! Modifier.isFinal(f.getModifiers())),而不是一遍又一遍地进行相同的检查
标签: java dynamic reflection javabeans