Я пытаюсь написать служебный класс, который может принимать String
и Class<?>
и возвращать обратно Object
, который действительно является типизированным экземпляром этого String
.
Например, если у меня есть строка "FALSE"
и класс "java.lang.Boolean"
, я хочу вернуть напечатанный Boolean.FALSE
. Et c для других классов, таких как String, Long, Int, Enum и др. c.
Я хочу сделать это так, чтобы не требовалось слишком много переписывать, когда новый тип добавлено. В настоящее время у меня есть метод с подписью Object getTypedValue(Class<?> clazz, String value);
.
Отсюда я думал, что смогу использовать Map<Class<?>, Function<String, Object>>
. Это прекрасно работает для таких случаев, как String и Boolean, но в случае Enum мне также нужно имя класса. Итак, Карта становится Map<Class<?>, BiFunction<String, Class<?>, Object>>
.
Но большинству методов не нужен параметр Class. Также обнаружили, что новый FunctionalInterface, такой как:
@FunctionalInterface
public interface OptionalClassFunction<T, CLAZZ, R> {
R apply(T t, CLAZZ... clazz);
}
, кажется, не работает, когда я передаю метод с только T в качестве лямбды.
Например,
ImmutableMap.of(
Boolean.class, Util::toBoolean
)
private Boolean toBoolean(String value);
не работает.
Любые предложения о том, как что-то вроде:
Map<Class<?>, WhateverFunction<String, MAYBE_A_CLASS, Object>>
?
Примеры методов:
public static Boolean toBoolean(String value) {
// derive bool
}
public static Enum toEnum(String value, Class<?> fieldType) {
// derive enum
}