我有以下代码,这段代码的转换是硬编码的(Person)由于object是泛型类型,有一种方法可以在运行时使用反射来获取它吗? 我没有类型,我只是在运行时得到它(可以是很多不同的类) 但所有类都有相同的方法 setId ,我该怎么办?
List<Object> listClsObj
for (Object object : listClsObj) {
((Person)object).setId(null);
}
我尝试了(object.getClass()。setId(null);我收到了sytax错误,并尝试了
Class<?> clazz = object.getClass();
(clazz).setId(null);
并且还会出现语法错误(也许我做得不好),我该如何处理它假设我不知道类类型?
答案 0 :(得分:1)
for(Object curObject : objectsList){
try {
Method method = curObject.getClass().getDeclaredMethod("setId", Integer.class); //suppose only one parameter in method
method.invoke(curObject, 1);
} catch (Exception e) {
//no such method exists
}
}
当然最好使用适当的面向对象设计。例如,如果它是您的实体,最好使用Layer Supertype Pattern基本实现主键设置。
答案 1 :(得分:1)
您可以尝试使用以下代码
Class<?> clazz = object.getClass();
Field field = clazz.getDeclaredField("id");
field.setAccessible(true);
field.set(object, null);