2013-02-27 234 views
3

我正在做下面的事來建立類TestA的公共方法。將方法作爲參數傳遞給方法

List<String> strings = new ArrayList<String>(); 
Method[] methods = TestA.class.getDeclaredMethods(); 
for(Method method : methods) 
{ 
    if(Modifier.isPublic(method.getModifiers())) 
    {   
    strings.add(method.getName()); 
    } 
} 

我也需要做同樣的事情爲TestBTestC等,所以我想有一個函數,它接受一個類名和返回的公共方法的String數組。我怎樣才能做到這一點?

如果我有一個Object參數,我將不得不創建每個類的實例,然後再將它們發送給函數。我希望避免這種情況。

+2

僅供參考,你可以有一個['Class'](http://docs.oracle.com/javase/7/docs/api/ java/lang/Class.html)作爲方法的參數。 – 2013-02-27 12:16:41

+0

您可以將'java.lang.Class'對象作爲參數傳遞給方法。 – 2013-02-27 12:17:09

+0

您是否需要班級超類的公共方法? – 2013-02-27 12:21:14

回答

7

這聽起來像你想:

public static List<String> getPublicDeclaredMethods(Class<?> clazz) { 
    List<String> strings = new ArrayList<String>(); 
    Method[] methods = clazz.getDeclaredMethods(); 
    for(Method method : methods) { 
     if(Modifier.isPublic(method.getModifiers())) { 
      strings.add(method.getName()); 
     } 
    } 
    return strings; 
} 

然後調用它:

List<String> names = getPublicDeclaredMethods(TestA.class); 

你也應該考慮使用Class.getMethods只反正返回public方法 - 但返回從超繼承的。

+0

你覺得''是必要的嗎?我想我們可以忽略它,只能寫'Class'。它有什麼區別? – 2013-02-27 12:20:45

+0

@HarryJoy:是 - 'Class'是一個原始類型,它會導致編譯時警告。 '類'是一個使用通配符的通用類型,沒有任何警告就沒有問題。 – 2013-02-27 12:45:50

1

您可以通過java.lang.Class例如它的自我,像圖所示

public void introspectClass(Class cls){ 
    List<String> strings = new ArrayList<String>(); 
    Method[] methods = cls.getDeclaredMethods(); 
    for(Method method : methods) 
    { 
     if(Modifier.isPublic(method.getModifiers())) 
     {   
     strings.add(method.getName()); 
     } 
    } 
    }