2014-04-20 121 views
0

我有一個Object[],我需要閱讀的類型爲Class[]<?>,我則去這個方法讀陣列成第二陣列

public static void invokeMethod(String className, String methodName, 
     Class<?>[] paramTypes, Object[] params) { 
    try { 

     Class<?> commandclass = Class.forName(className); 
     Method method = commandclass.getMethod(methodName, paramTypes); 
     method.invoke(method, params); 

    } catch (NoSuchMethodException | SecurityException 
      | ClassNotFoundException | IllegalAccessException 
      | IllegalArgumentException | InvocationTargetException e) { 
     e.printStackTrace(); 
    } 
} 

兩個數組不能有任何null值,否則會拋出一個NullPointerException

編輯: 代碼

ArrayList<Object> params = new ArrayList<Object>(); 
     int i = 1; 
     while(true){ 
      String str = input.substring(input.indexOf(" ", i), input.indexOf(" ", i + 1)); 
      if(str.equalsIgnoreCase(" ")){ 
       break; 
      } 
      params.add(i, str); 
      i++; 
     } 
     ArrayList<Class<?>> classes = new ArrayList<Class<?>>(); 
     for(int j = 0; j > params.toArray().length; i++){ 
      params.toArray()[j].getClass(); 
     } 

代碼後來:

invokeMethod("com.cjcl.commands.NewCommand", "command", (Class<?>[]) classes.toArray(), params.toArray()); 
+0

您是否有任何示例代碼您已經嘗試完成此操作以獲取疑難解答? –

+0

我已經嘗試過for循環和'ArrayLists',但我不能讓數組沒有空值。 – Curlip

+0

那是什麼時候我嘗試ArrayLists – Curlip

回答

0

一些修改嘗試:

ArrayList<Object> params = new ArrayList<Object>(); 
    int i = 1; 
    while(true){ 
     String str = input.substring(input.indexOf(" ", i), input.indexOf(" ", i + 1)); 
     if(str.equalsIgnoreCase(" ")){ 
      break; 
     } 
     params.add(i, str); 
     i++; 
    } 
    ArrayList<Class<?>> classes = new ArrayList<Class<?>>(); 
    // Move the toArray call outside the loop, otherwise it's rebuilding the parameters array each time. 

    Object[] paramsArray = params.toArray() 
    int paramsArrayLength = paramsArray.length; 

    // EDIT: Changed to j++ 
    // This for loop needs to be j < paramsArrayLength. 
    for(int j = 0; j < paramsArrayLength; j++){ 
     classes.add(paramsArray[j].getClass()); 
    } 

最有可能的,即混合起來比較操作是你的問題。既然你比那裏有更多的事情,那就不是那麼容易了。另外,你並沒有向你的集合中添加任何東西,所以toArray幾乎肯定試圖從一個空集合中創建一個數組。

基於你正在初始化i = 1的事實,你的異常是「索引超出範圍1」,我還想象while循環內的代碼沒有執行。

+0

java.lang.IndexOutOfBoundsException:Index:1,Size:0 – Curlip