我正在尝试创建 String 类的新实例,但在某些情况下出现异常。就像当我正在制作 4 个参数的构造函数(字节 []、int、int、int)时,我得到了它,当我正在制作 2 个参数的构造函数时,一切正常。
public static Object makeNewInstance(Constructor<?> con) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
@SuppressWarnings("resource")
Scanner sc = new Scanner(System.in);
Class<?>[] paraListTypes = con.getParameterTypes();
Object[] valArr = new Object[paraListTypes.length];
for(int i=0;i<paraListTypes.length ; i++){
if(paraListTypes[i].isPrimitive()){
System.out.println("Enter " + paraListTypes[i].toString() + " value:");
valArr[i] = getOneValue(paraListTypes[i].toString());
}
else if(paraListTypes[i].isArray()){
valArr[i] = makeNewArray(paraListTypes[i]);
}
else{
System.out.println(paraListTypes[i]);
valArr[i] = printAllConstructorsAndChooseOne(paraListTypes[i]);
}
}
try{
return con.newInstance(valArr);
}
catch(InvocationTargetException e){
System.out.println(e);
}
return null;
}
得到的完整轨迹是:
sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 处 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 处 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 处的线程“main”java.lang.reflect.InvocationTargetException 中的异常java.lang.reflect.Constructor.newInstance(Unknown Source) at labs.Ref.makeNewInstance(Ref.java:75) at labs.Ref.main(Ref.java:161) 原因:java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:9 在 java.lang.String.checkBounds(Unknown Source) ... 7 更多 –