fork download
  1. import java.lang.reflect.Field;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4.  
  5. class CarFiller {
  6.  
  7. public static void main(String[] args) throws Exception {
  8. Map<String, String> data = new HashMap<>();
  9. data.put("name", "BMW");
  10. data.put("year", "2018");
  11. data.put("type", "TWO");
  12.  
  13. Car car = new Car();
  14. fillField(car, "name", data);
  15. fillField(car, "year", data);
  16. fillField(car, "type", data);
  17.  
  18. System.out.println(car);
  19. }
  20.  
  21. private static void fillField(Object instance, String fieldName, Map<String, String> data) throws Exception {
  22. Field field = instance.getClass().getDeclaredField(fieldName);
  23. field.setAccessible(true);
  24.  
  25. String value = data.get(fieldName);
  26. Object typedValue = null;
  27. final Class<?> type = field.getType();
  28. if (int.class.isAssignableFrom(type)) {
  29. typedValue = Integer.parseInt(value);
  30. } else if (type.isEnum()) {
  31. typedValue = Enum.valueOf((Class<Enum>) type, value);
  32. } else {
  33. // Assume String
  34. typedValue = value;
  35. }
  36.  
  37. field.set(instance, typedValue);
  38. }
  39.  
  40. enum Type {
  41. ONE, TWO
  42. }
  43.  
  44. static class Car {
  45. private String name;
  46. private int year;
  47. private Type type;
  48.  
  49. public void setName(String name) {
  50. this.name = name;
  51. }
  52. public void setYear(int year) {
  53. this.year = year;
  54. }
  55. public void setType(Type type) {
  56. this.type = type;
  57. }
  58.  
  59. @Override
  60. public String toString() {
  61. return "Car [name=" + name + ", year=" + year + ", type=" + type + "]";
  62. }
  63. }
  64. }
  65.  
Success #stdin #stdout 0.05s 2184192KB
stdin
Standard input is empty
stdout
Car [name=BMW, year=2018, type=TWO]