0

我有以下代码,并且此代码是硬编码的(人)由于对象是泛型类型,因此有一种方法可以在运行时通过反射获取它吗? 我没有类类型,我只是在运行时得到它(可以是许多不同的类)但是所有类都有相同的方法setId,我该怎么做?

List<Object> listClsObj
    for (Object object : listClsObj) {
            ((Person)object).setId(null);
        }

我尝试了 (object.getClass().setId(null); 我得到了语法错误,也尝试了

Class<?> clazz = object.getClass(); 
(clazz).setId(null);

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

4

2 回答 2

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
    }
}

当然最好使用适当的面向对象设计。例如,如果它是您的实体,最好使用具有主键设置基本实现的层超类型模式。

于 2013-01-24T13:30:41.003 回答
1

您可以尝试使用以下代码

Class<?> clazz = object.getClass();
                Field field = clazz.getDeclaredField("id");
                field.setAccessible(true);
                field.set(object, null);
于 2013-01-24T13:32:41.833 回答