Вероятно, просто необходимо отобразить примитивы, и для остальной части классов выполняют "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. Строка или потенциально имеет метод как это.
"doSomething представляют yes|no в виде строки"
существует много этого вида кода в проектах ОС как Struts, В спящем режиме, Spring и Apache освобождают (только для упоминания некоторых), таким образом, Вы не должны запускать с нуля.
BTW. Я не скомпилировал вышеупомянутый код, но я вполне уверен, он работает с небольшими модификациями, вниз не голосуют за меня за это.
Нет, это кажется вполне разумным. Существует метод List
AddRange () , который в основном делает именно это, но требует, чтобы ваша коллекция была конкретным List
.
Все классы библиотеки общих коллекций C5 поддерживают метод AddRange
. C5 имеет гораздо более надежный интерфейс, который фактически предоставляет все возможности его базовых реализаций и совместим с интерфейсами System.Collections.Generic
ICollection
и IList
, Это означает, что коллекции C5
можно легко заменить в качестве базовой реализации.