Как в рантайме привести строку к нужному типу?

437
29 декабря 2016, 07:12

Есть класс

public class A {
  public Integer field;
}

Как в рантайме присвоить полю приведённое к нужному типу значение строки типа такого:

A a = new A();
String field = "field";
String value = "123";
a.getClass().getField(field).set(a, /*value*/ ); // КАК?!
Answer 1

Можно вот так

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);
Answer 2

Судя по этому вопросу и одному из ответов на него:

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;
}
READ ALSO
Определить, входит ли символ в TextView внутри if

Определить, входит ли символ в TextView внутри if

Вопрос можно разделить на два пункта:

543
Ввод/Вывод в Android

Ввод/Вывод в Android

Подскажите, как в Android Studio через IO открыть файл из любой точки файловой системы?

404
передвижение объекта в java с помощью slider

передвижение объекта в java с помощью slider

Как осуществить передвижение объекта в java с помощью slider? Те

434