У меня есть HashMap, в котором содержится около 500 пар ключ-значение.Эти значения должны быть установлены в атрибуты объекта, пример указанного объекта ниже -
public class SomeClass {
private String attrib1;
private double attrib2 = Double.NaN
//getters and setters
}
Я должен извлечь значения из HashMap на основе константы, а затем установить их в этот объект,Прямо сейчас, вот как я это делаю
public void someMethod(HashMap<String, String> mapToUse, SomeClass some) {
some.setAttrib1(mapToUse.get(MyConstant.SOME_CONST));
some.setAttrib2(methodToParseDouble(mapToUse.get(MyConstant.SOME_CONST2)));
}
Этот код прекрасно работает без проблем, но в моем случае у меня есть 500 пар ключ-значение на карте, и объект содержит около 280 атрибутов.Таким образом, наличие 280 жестко запрограммированных сеттеров выглядит ужасно в коде.Есть ли лучший элегантный способ сделать это?
Прямо сейчас мой код имеет 280 вызываемых методов установки, и для каждого из них у меня есть 280 ключей (определенных как константы), которые я использую для поиска атрибутов.
Я читал о BeanUtils, но я изо всех сил пытаюсь заставить его работать с HashMap.Если у кого-нибудь из вас есть пример кода, который я могу использовать для извлечения и установки из HashMap, это было бы здорово.
Редактировать:
Так что я заставил BeanUtils работать, но теперь у меня естьдругая проблема.Рабочий код BeanUtils
testMap.put("attrib1", "2");
testMap.put("attrib2", "3");
testMap.put("completelyDiffAttrib1", "10000"); //This breaks the code
SomeClass testBean = new SomeClass();
BeanUtils.populate(testBean, testMap);
Приведенный выше код работает, когда у меня есть все атрибуты, упомянутые в карте в моем объекте, но если у меня есть дополнительное значение в HashMap, которого нет в качестве атрибута в классе, тогдамой код ломается.Я получаю сообщение об ошибке NoClassDef -
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/collections/FastHashMap
Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections.FastHashMap
Я добавил commons-collection4-4.3.jar в путь к классам, о котором упоминалось в другом месте.
Я могу вспомнить один подход, в котором я могу сначала отфильтровать Карту, а затем запустить ее через заполнение, но я ищу более эффективные способы сделать это.
Я не могуизменить, как источник, то есть это будет HashMap, и мне нужно именно в этой форме объекта.У меня нет идей, если у кого-то есть предложения, я могу немного почитать.Спасибо!