問題在Java reflectiion炭[]用於方法參數
SampleClass
Class Question{
public int a (String a, char[] c,int b) { return b; }
}
方法通過反射
public Method getMethodWithParams(Class<?> klasa, String methodName, Class<?>[] params) throws
SecurityException, NoSuchMethodException {
Class<?>[] primitivesToWrappers =
ClassUtils.primitivesToWrappers(params);
Method publicMethod = MethodUtils.getMatchingAccessibleMethod(klasa,
methodName,
primitivesToWrappers);
System.out.println(publicMethod.toGenericString());
return publicMethod;
}
private void printParams(Type[] types) throws ClassNotFoundException {
for (Type genericParameterType : types) {
System.out.println(genericParameterType.toString());
}
}
獲得方法與名稱和參數java類的全量化名主程序
Question cls = new Question();
Class<?>[] paramString = new Class<?>[3];
paramString[0] = String.class;
paramString[1] = char[].class;
paramString[2] = int.class;
Method methodParams1 = getMethodParams(cls.getClass(),"a", paramString);
System.out.println(methodParams1.getName());
Type[] genericTypes = methodParams1.getParameterTypes();
printParams(genericTypes);
輸出是:
一個
類java.lang.String
類[C
INT
問題是,下一個測試失敗
Character testCharacterObjArray = new Character[]
Class<?> aClass = ClassUtils.getClass("[C", true);
Assert.assertEquals(testCharacterObjArray.getClass(), aClass);
ClassUtils來自org.apache.commons.lang3
尋找一個庫來獲取「[Ljava.lang.Character;」而不是「[C」,因爲它出現ClassUtils.primitivesToWrappers()失敗。基於stephen
解決方案:
public Class<?> convertStringToClass(String str) throws
ClassNotFoundException {
Class<?> aClass = ClassUtils.getClass(str, true);
if (aClass.isArray()) {
Class<?> primitiveToWrapper =
ClassUtils.primitiveToWrapper(aClass.getComponentType());
Object newInstance = Array.newInstance(primitiveToWrapper, 0);
System.out.println("****" + newInstance.getClass().getName());
return ClassUtils.
getClass(newInstance.getClass().getName(), true);
}
else {
return ClassUtils.primitiveToWrapper(aClass);
}
}
我不明白的考驗,你爲什麼不想要有testCharacterObjArray = char []。class? (順便說一下,測試不能編譯) – Betlista