可能您只需要映射原语,其余类执行“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 字符串是|否”
在 Struts、Hibernate、Spring 和 Apache libs 等 OS 项目中有大量此类代码(仅举几例),因此您无需从零开始。
顺便提一句。我没有编译上面的代码,但我很确定它只需稍加修改就可以工作,不要对此投反对票。