おそらく、プリミティブをマップし、残りのクラスに対して「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 );
}
つまり、プリミティブ型が格納されているマップを作成し、記述がプリミティブに属している場合は、マップされたクラスを使用します。このマップは、柔軟性を追加するために外部構成ファイルからロードすることもできます。そのため、java.lang.String の代わりに String をビルトインとして追加するか、このようなメソッドを持つ可能性があります。
"doSomething 文字列 yes|no "
Struts、Hibernate、Spring、Apache ライブラリなどの OS プロジェクトには、この種のコードがたくさんあるので (いくつか挙げるとすれば)、ゼロから始める必要はありません。
ところで。私は上記のコードをコンパイルしませんでしたが、少し変更を加えるだけで動作すると確信しています。