Вернуть тип generi c после анализа целого числа из строки - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь написать метод, который получает объект из базы данных. Этот метод должен иметь возможность указать, каким классом должен быть этот объект (например: get("some.key", Integer.class) вернет целое число). Однако, если ожидаемый тип является целым числом, а наше значение - строкой, я бы хотел, чтобы эта строка была преобразована в целое число и возвращено. Мой текущий код выглядит так:

public <T> T get(String key, Class<T> type) {
    Object element = ...;
    if (type == Integer.class && element instanceof String) return Integer.parseInt((String) element);
    return element;
}

Однако моя IDE выдает ошибку: при возврате Integer.parseInt((String) element) метод ожидает возвращаемый тип типа T, но я возвращаю целое число. , который в этом случае имеет тип T, но он не принимает это.

Я пытался преобразовать его так: (T) Integer.parseInt((String) element), но моя IDE говорит, что это неконвертируемые типы.

Как я могу сделать так, чтобы этот метод возвращал действительный объект типа T после синтаксического анализа Integer? Любая помощь приветствуется.

1 Ответ

3 голосов
/ 08 мая 2020

Преобразуйте свой результат в T, используя переданный вам экземпляр Class.

public <T> T get(String key, Class<T> type) {
    Object element = ...;
    if (type == Integer.class && element instanceof String) element = Integer.parseInt((String) element);
    return type.cast(element);
}
...