我有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)
尝试进行一些修改:
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循环中的代码没有执行。