2013-01-24 55 views
0

我有下面的代碼,並且此代碼鑄造是硬編碼(人)由於對象是泛型類型有一種方法來獲得它在運行時反射? 我沒有類型,我只是在運行時得到它(可以是許多不同的類) 但所有的類都有相同的方法setId,我該怎麼做呢?類類型對象的更新集方法

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

我試着用(object.getClass()SETID(NULL);我得到了錯誤的語法時才也試圖與

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

,並得到語法錯誤(也許我沒有把它做好),我應該怎麼處理它以爲我不知道類的類型?

回答

1

您可以用下面的代碼

Class<?> clazz = object.getClass(); 
       Field field = clazz.getDeclaredField("id"); 
       field.setAccessible(true); 
       field.set(object, null); 
+0

最好是設定原能見度破解後場嘗試。 – Taky

+0

這是什麼意思? –

+0

設置可訪問字段後最好返回到以前的狀態 – Taky

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,基本實現主鍵設置。

相關問題