Вы можете просто использовать стандартный Java Beans:
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
public void populateValues(Object bean, Map<String, Object> propertyValues) throws IntrospectionException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
BeanInfo beanInfo = Introspector.getBeanInfo(Pojo.class);
for(PropertyDescriptor pd : beanInfo.getPropertyDescriptors()) {
if(pd.getWriteMethod() != null && propertyValues.containsKey(pd.getName())) {
pd.getWriteMethod().invoke(bean, propertyValues.get(pd.getName()));
}
}
}
Обратите внимание, что это не должно вообще быть использованы, чтобы избежать вызова сеттеров. Это удобно, если у вас уже есть карта, содержащая такие записи из другого места.
Также обратите внимание, что эта реализация несовместима с входом isSet=true
. Для этого потребуется ключ ввода set
.
Возможно, вы действительно захотите посмотреть на шаблон строителя. Если вы используете java 8, вам может быть интересен более общий способ реализации шаблона построителя, как показано в this answer of me.
Пожалуйста, не делайте этого, если вам действительно не нужно. Вместо этого вы должны правильно называть методы set. – marstran
Согласен, вы не должны этого делать, если хотите, чтобы избежать большого количества кода, попробуйте Builder Pattern. – Shadov