2013-07-30 21 views
19

因此,讓我們說我想從一個類使用Method m = plugin.getClass().getDeclaredMethod("getFile");得到一個方法。使用.getDeclaredMethod從類擴展另一個方法

plugin類正在擴展另一個類,這是getFile方法的一個類。我不太確定這是否會引起NoSuchMethodException例外。

我知道plugin正在擴展的類有getFile方法。 對不起,如果我聽起來很混亂,有點累。

回答

55

這聽起來像你只需要使用getMethod而不是getDeclaredMethod。的getDeclaredMethod整點是,它僅發現在類中聲明你調用它的方法:

返回反映此Class對象表示的類或接口的指定已聲明方法的Method對象。

鑑於getMethod具有:

C被搜索的任何匹配的方法。如果找不到匹配的方法,步驟1的算法是遞歸調用上C.

的超這隻會發現公共方法雖然。如果你追求的方法是不公開的,你應該自己遞歸起來類層次結構,層次結構中的每個類使用getDeclaredMethodgetDeclaredMethods

Class<?> clazz = plugin.getClass(); 
while (clazz != null) { 
    Method[] methods = clazz.getDeclaredMethods(); 
    for (Method method : methods) { 
     // Test any other things about it beyond the name... 
     if (method.getName().equals("getFile") && ...) { 
      return method; 
     } 
    } 
    clazz = clazz.getSuperclass(); 
} 
+0

+1,一個更好的解決方案比我早。 – rgettman

+0

如果有幫助,我使用這個的原因是由於該方法首先是私人的。然後你編輯。好的,我會嘗試編輯。 – PaulBGD

+0

@Ultimate:嗯,這很重要。如果你剛纔提到過,這會有所幫助。 –

相關問題