import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
class CarFiller {
Map
<String, String
> data
= new HashMap
<>(); data.put("name", "BMW");
data.put("year", "2018");
data.put("type", "TWO");
Car car = new Car();
fillField(car, "name", data);
fillField(car, "year", data);
fillField(car, "type", data);
}
Field field
= instance.
getClass().
getDeclaredField(fieldName
); field.setAccessible(true);
String value
= data.
get(fieldName
); final Class<?> type = field.getType();
if (int.class.isAssignableFrom(type)) {
typedValue
= Integer.
parseInt(value
); } else if (type.isEnum()) {
typedValue = Enum.valueOf((Class<Enum>) type, value);
} else {
// Assume String
typedValue = value;
}
field.set(instance, typedValue);
}
enum Type {
ONE, TWO
}
static class Car {
private int year;
private Type type;
public void setName
(String name
) { this.name = name;
}
public void setYear(int year) {
this.year = year;
}
public void setType(Type type) {
this.type = type;
}
@Override
return "Car [name=" + name + ", year=" + year + ", type=" + type + "]";
}
}
}
aW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkZpZWxkOwppbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CmltcG9ydCBqYXZhLnV0aWwuTWFwOwoKY2xhc3MgQ2FyRmlsbGVyIHsKCglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKCQlNYXA8U3RyaW5nLCBTdHJpbmc+IGRhdGEgPSBuZXcgSGFzaE1hcDw+KCk7CgkJZGF0YS5wdXQoIm5hbWUiLCAiQk1XIik7CgkJZGF0YS5wdXQoInllYXIiLCAiMjAxOCIpOwoJCWRhdGEucHV0KCJ0eXBlIiwgIlRXTyIpOwoKCQlDYXIgY2FyID0gbmV3IENhcigpOwoJCWZpbGxGaWVsZChjYXIsICJuYW1lIiwgZGF0YSk7CgkJZmlsbEZpZWxkKGNhciwgInllYXIiLCBkYXRhKTsKCQlmaWxsRmllbGQoY2FyLCAidHlwZSIsIGRhdGEpOwoJCQoJCVN5c3RlbS5vdXQucHJpbnRsbihjYXIpOwoJfQoJCglwcml2YXRlIHN0YXRpYyB2b2lkIGZpbGxGaWVsZChPYmplY3QgaW5zdGFuY2UsIFN0cmluZyBmaWVsZE5hbWUsIE1hcDxTdHJpbmcsIFN0cmluZz4gZGF0YSkgdGhyb3dzIEV4Y2VwdGlvbiB7CgkJRmllbGQgZmllbGQgPSBpbnN0YW5jZS5nZXRDbGFzcygpLmdldERlY2xhcmVkRmllbGQoZmllbGROYW1lKTsKCQlmaWVsZC5zZXRBY2Nlc3NpYmxlKHRydWUpOwoJCQoJCVN0cmluZyB2YWx1ZSA9IGRhdGEuZ2V0KGZpZWxkTmFtZSk7CgkJT2JqZWN0IHR5cGVkVmFsdWUgPSBudWxsOwoJCWZpbmFsIENsYXNzPD8+IHR5cGUgPSBmaWVsZC5nZXRUeXBlKCk7CgkJaWYgKGludC5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKHR5cGUpKSB7CgkJCXR5cGVkVmFsdWUgPSBJbnRlZ2VyLnBhcnNlSW50KHZhbHVlKTsKCQl9IGVsc2UgaWYgKHR5cGUuaXNFbnVtKCkpIHsKCQkJdHlwZWRWYWx1ZSA9IEVudW0udmFsdWVPZigoQ2xhc3M8RW51bT4pIHR5cGUsIHZhbHVlKTsKCQl9IGVsc2UgewoJCQkvLyBBc3N1bWUgU3RyaW5nCgkJCXR5cGVkVmFsdWUgPSB2YWx1ZTsKCQl9CgoJCWZpZWxkLnNldChpbnN0YW5jZSwgdHlwZWRWYWx1ZSk7Cgl9CgkKCWVudW0gIFR5cGUgewoJICAgIE9ORSwgVFdPCgl9CgoJc3RhdGljIGNsYXNzIENhciB7CgkJcHJpdmF0ZSBTdHJpbmcgbmFtZTsKCSAgICBwcml2YXRlIGludCB5ZWFyOwoJICAgIHByaXZhdGUgVHlwZSB0eXBlOwogICAgCgkJcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewoJCQl0aGlzLm5hbWUgPSBuYW1lOwoJCX0KCQlwdWJsaWMgdm9pZCBzZXRZZWFyKGludCB5ZWFyKSB7CgkJCXRoaXMueWVhciA9IHllYXI7CgkJfQoJCXB1YmxpYyB2b2lkIHNldFR5cGUoVHlwZSB0eXBlKSB7CgkJCXRoaXMudHlwZSA9IHR5cGU7CgkJfQoJCQoJICAgIEBPdmVycmlkZQoJCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CgkJCXJldHVybiAiQ2FyIFtuYW1lPSIgKyBuYW1lICsgIiwgeWVhcj0iICsgeWVhciArICIsIHR5cGU9IiArIHR5cGUgKyAiXSI7CgkJfQkJCgl9Cn0K