Вы можете просто использовать Reflection API. Вот пример, основанный на вашем коде:
public class Main1 {
public static void main(String[] args) {
Map<String, String> keyValueMap = new HashMap<>();
MyClass obj = new MyClass(1,2,3);
keyValueMap.put("c", "6");
keyValueMap.put("b", "4");
System.out.println(obj);
//Update only b and c values of obj:
updateObj(obj, keyValueMap);
System.out.println(obj);
keyValueMap.put("a", "5");
keyValueMap.put("b", "7");
//Update only a and b values of obj:
updateObj(obj, keyValueMap);
System.out.println(obj);
}
private static void updateObj(MyClass myClass, Map<String, String> map) {
Class<MyClass> clazz = MyClass.class;
for (String fieldName: map.keySet()) {
try {
Field field = clazz.getDeclaredField(fieldName);
field.setAccessible(true);
field.set(myClass, Integer.parseInt(map.get(fieldName)));
} catch (NoSuchFieldException ex) {
System.out.println("No Such Field Found!!!");
} catch (IllegalAccessException ex) {
System.out.println(ex);
}
}
}
}
class MyClass {
private int a;
private int b;
private int c;
public MyClass(int a, int b, int c) {
this.a = a;
this.b = b;
this.c = c;
}
@Override
public String toString() {
return "MyClass{" + "a=" + a + ", b=" + b + ", c=" + c + '}';
}
}
Примечание: не забудьте использовать field.setAccessible(true);
для частных членов; В противном случае вы получите исключение IllegalAccessException.