Есть класс
public class A {
public Integer field;
}
Как в рантайме присвоить полю приведённое к нужному типу значение строки типа такого:
A a = new A();
String field = "field";
String value = "123";
a.getClass().getField(field).set(a, /*value*/ ); // КАК?!
Можно вот так
A a = new A();
String fieldName = "field";
String fieldValue = "123";
// берем поле
Field field = a.getClass().getDeclaredField(fieldName);
// берем класс поля
Class fieldType = field.getType();
// ищем конструктор с параметром типа String
Constructor constructor = fieldType.getDeclaredConstructor(String.class);
// делаем новый объект
Object value = constructor.newInstance(fieldValue);
field.set(a, value);
System.out.println(a.field);
Судя по этому вопросу и одному из ответов на него:
the only way to solve this in Java is to write code that covers all cases with lots of if
and else
and instanceof
expressions
какой-то хороший способ найти вряд ли получится.
Самое примитивное решение:
A a = new A();
String field = "field";
String value = "123";
Field targetField = a.getClass().getField(field);
String targetFieldType = targetField.getType().getSimpleName();
switch (targetFieldType) {
case "Integer":
case "int":
targetField.set(a, Integer.parseInt(value));
break;
case "String":
targetField.set(a, value);
break;
}
Подскажите, как в Android Studio через IO открыть файл из любой точки файловой системы?
Как осуществить передвижение объекта в java с помощью slider? Те