更新类类型对象的set方法

时间:2013-01-24 13:24:23

标签: java reflection

我有以下代码,这段代码的转换是硬编码的(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);

并且还会出现语法错误(也许我做得不好),我该如何处理它假设我不知道类类型?

2 个答案:

答案 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);