2010-12-09 231 views
0

當Method的其中一個參數調用invoke(Object obj, Object[] args)需要一個對象參數時,如何調用靜態java方法?使用方法調用靜態方法?

例如
在這裏我有一段代碼,它檢查一個類並找到任何沒有參數,返回類型爲布爾型並以名稱「test」開頭的靜態方法。我試圖調用這些方法來查看它們是否返回true,而我在如何做到這一點方面存在爭議。

for (int i = 0; i < Class.forName(name).getDeclaredMethods().length; i++) { 
    Method method = Class.forName(name).getDeclaredMethods()[i]; 
    if (method.getParameterTypes().length == 0 
      && method.getReturnType().getName() == "boolean" 
      && method.getName().startsWith("test", 0)) { 
     if (Class.forName(name).getDeclaredMethods()[i].invoke()==true) 
      System.out.println("Test" + " " + Class.forName(name).getDeclaredMethods()[i].getName() + " " + "succeeded"); 
    } 
} 
+0

?你有沒有接受過任何答案? – 2010-12-09 05:29:11

+0

你是什麼意思?...你可以接受答案嗎? – Jake 2010-12-09 05:39:42

回答

1

首先你聲稱你正在檢查方法staticness。但實際上你不是。使用此檢查static修改,

Modifier.isStatic(method.getModifiers()); 

現在,你可以通過null作爲第一個參數,一個空數組作爲第二,method.invoke()如果方法是static零個參數。例如,

Class.forName(name).getDeclaredMethods()[i].invoke(null, new Object[0]); 

提示:不要重複每次Class.Forname()。將它存儲在一些變量中並使用它。在適當的地方做類似的事情。