2015-06-24 31 views
0

我試圖調用靜態方法Object[]參數類型。當我調試時,識別出正確的方法,並且我認爲參數類型對我來說是正確的類型。Java Method.invoke()拋出IllegalArgumentException:參數類型不匹配

public String convertToJSFunction(Method method, Object[] params) { 

    String function = method.getName(); 

    for (Method m : JavaToJS.class.getDeclaredMethods()) { 
     if (m.getName().equals(function)) 
      try { 
       return (String) m.invoke(null,params); 
      } catch (IllegalAccessException e) { 
       e.printStackTrace(); 
       return null; 
      } catch (InvocationTargetException e) { 
       e.printStackTrace(); 
       return null; 
      } catch (IllegalArgumentException e) { 
       e.printStackTrace(); 
       return null; 
      } 
    } 

    return null; 
} 

JavaToJS只有靜態方法。調試完畢後,我試圖調用m是這樣的方法:

public static String setRegionNumber(Object[] params) 

拋出IllegalArgumentException: argument type mismatch。這怎麼可能?

回答

4

我猜你在呼喚

Method setRegionNumber=...; // "setRegionNumber" Method 
Object[] params=...; // your Object-Array Parameter 
convertToJSFunction(setRegionNumber, params); 

,但你需要做的是

Method setRegionNumber=...; // "setRegionNumber" Method 
Object[] params=...; // your Object-Array Parameter 
convertToJSFunction(setRegionNumber, new Object[] { params }); 

這是因爲Method.invoke預計調用的方法作爲對象數組的參數列表。所以如果你直接傳遞你的對象數組,那麼它會將其解釋爲參數列表。所以如果你有一個Object[]參數,你需要將它包裝在一個對象數組中,就像其他參數一樣。

相關問題