0
我有这个模型类有大量的字符串。我想在将它们发送到JSP之前对每个字符串进行清理。这里是我的代码:在运行时使用反射调用setter时的实例化异常
public static void sanitize(Object obj) {
for (Field field : obj.getClass().getDeclaredFields()) {
if (field.getType().isAssignableFrom(String.class)) {
String name = Character.toUpperCase(field.getName().charAt(0)) + field.getName().substring(1);
Method getter;
Method setter;
try {
getter = obj.getClass().getDeclaredMethod("get" + name);
setter = obj.getClass().getDeclaredMethod("set" + name, field.getType());
setter.invoke(obj.getClass().newInstance(),
sanitizeString(getter.invoke(obj.getClass().newInstance())));
log.info("Done");
} catch (Exception e) {
log.error("{}", e);
}
}
}
}
问题: setter方法调用行抛出一个实例异常。现在,我明白运行时对象类可能没有无参数构造函数。
有什么办法可以避免这种情况?构建一个无参数构造函数会有所帮助吗?
谢谢!
为什么要构造一个新实例,然后调用setter?你不应该在原始对象上调用setter吗? – Kenster
我的不好。我刚刚解决了它。这就是你的意思,对吧? setter.invoke(OBJ,sanitizeString(getter.invoke(OBJ))); –
@kenster添加您的评论作为答案,以便我可以接受它。 –