AddRange к набору

Вероятно, просто необходимо отобразить примитивы, и для остальной части классов выполняют "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. Я не скомпилировал вышеупомянутый код, но я вполне уверен, он работает с небольшими модификациями, вниз не голосуют за меня за это.

97
задан Juan Castillo 5 July 2016 в 18:22
поделиться

2 ответа

Нет, это кажется вполне разумным. Существует метод List . AddRange () , который в основном делает именно это, но требует, чтобы ваша коллекция была конкретным List .

.
57
ответ дан 24 November 2019 в 05:28
поделиться

Все классы библиотеки общих коллекций C5 поддерживают метод AddRange . C5 имеет гораздо более надежный интерфейс, который фактически предоставляет все возможности его базовых реализаций и совместим с интерфейсами System.Collections.Generic ICollection и IList , Это означает, что коллекции C5 можно легко заменить в качестве базовой реализации.

1
ответ дан 24 November 2019 в 05:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: