Вероятно, вам просто нужно отобразить примитивы, а для остальных классов выполнить метод "forName":
Я бы сделал что-то вроде:
void someWhere(){
String methodDescription = "doSomething int double java.lang.Integer java.lang.String"
String [] parts = methodDescription.split();
String methodName= parts[0]
Class [] paramsTypes = getParamTypes( parts ); // Well, not all the array, but a, sub array from 1 to arr.length..
Method m = someObject.class.getMethod( methodName, paramTypes );
etc. etc etc.
}
public Class[] paramTypes( String [] array ){
List<Class> list = new ArrayList<Class>();
for( String type : array ) {
if( builtInMap.contains( type )) {
list.add( builtInMap.get( type ) );
}else{
list.add( Class.forName( type ) );
}
}
return list.toArray();
}
// That's right.
Map<String,Class> builtInMap = new HashMap<String,Class>();{
builtInMap.put("int", Integer.TYPE );
builtInMap.put("long", Long.TYPE );
builtInMap.put("double", Double.TYPE );
builtInMap.put("float", Float.TYPE );
builtInMap.put("bool", Boolean.TYPE );
builtInMap.put("char", Character.TYPE );
builtInMap.put("byte", Byte.TYPE );
builtInMap.put("void", Void.TYPE );
builtInMap.put("short", Short.TYPE );
}
То есть создайте карту, в которой хранятся типы примитивов, и если описание принадлежит примитиву, тогда используйте отображенный класс. Эта карта также может быть загружена из внешнего файла конфигурации, чтобы добавить гибкости, поэтому вы можете добавить String как встроенную вместо java.lang.String или потенциально иметь такой метод.
"doSomething string yes | no"
Существует много такого рода кода в проектах ОС, таких как библиотеки Struts, Hibernate, Spring и Apache (только некоторые из них), поэтому вам не нужно начинать с нуля.
КСТАТИ. Я не скомпилировал приведенный выше код, но я почти уверен, что он работает с небольшими изменениями, не голосуйте за меня.