2014-04-20 89 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