Как я могу разобрать значение в соответствующий тип цели - PullRequest
0 голосов
/ 07 марта 2019

У меня есть метод, который имеет значение двух параметров: Object и initialValueType: String.

public Object parseValueForInitialValueType(Object value, String initialValueType) {
    Class<?> clazz = Class.forName(initialValueType);
    Constructor<?> constructor = clazz.getConstructor(String.class);
    return constructor.newInstance(value);
}

У этих параметров могут быть следующие значения:

value -> "test":String; initialValueType -> "java.lang.String"; method output -> "test":String
value -> 123.0:Double; initialValueType -> "java.lang.Double"; method output -> 123.0:Double
value -> "456.0":String; initialValueType -> "java.lang.Double"; method output -> "426.0:Double
value -> "123.000":String; initialValueType -> "java.math.BigDecimal"; method output -> 123.000:BigDecimal

Проблема в том, что яполучить исключение:

Exception in thread "main" java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)

Как я могу разобрать значение в требуемом initialValueType?

В принципе, я хочу создать новый объект для initialValueType.

1 Ответ

0 голосов
/ 07 марта 2019

Похоже на решение:

public Object parseValueForInitialValueType(Object value, String initialValueType) {
    Class<?> clazz = Class.forName(initialValueType);
    Constructor<?> constructor = clazz.getConstructor(String.class);
    return constructor.newInstance(String.valueOf(value));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...