将数组读入第二个数组

时间:2014-04-20 22:11:08

标签: java arrays methods

我有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());

1 个答案:

答案 0 :(得分: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循环中的代码没有执行。