Заполнение элементов списка в Java с помощью Reflection - PullRequest
1 голос
/ 22 марта 2011

Мне нужно заполнить объект значениями в формате String, и у меня есть конвертер для преобразования значений String в любые требуемые значения. Но как узнать тип элементов списка? Это List<String> или List<Integer>?

Ответы [ 4 ]

2 голосов
/ 22 марта 2011

В зависимости от вашего варианта использования, вы можете получить универсальный тип List несколькими различными способами.

Этот пост показывает, как это можно сделать для возвращаемые типы методов, параметры методов и переменные полей

Когда во время выполнения проверяется сам параметризуемый тип, например java.util.List, нет никакого способа узнать, для какого типа был задан параметр.Это имеет смысл, поскольку тип может быть параметризован для всех типов типов в одном приложении.Но когда вы проверяете метод или поле, которое объявляет использование параметризованного типа, вы можете видеть во время выполнения, к какому типу параметризованный тип был параметризован.

Если это не один из этих 3 случаев,Вы не можете получить тип Generic из-за стирания типа .

2 голосов
/ 22 марта 2011

Обобщения Java являются функциями времени компиляции, List и List одинаковы во время выполнения. Поэтому вы не можете знать тип компонента Collection во время выполнения ..

Этот тип задаваемого вопросаочень часто есть способ получить тип компонента Collection во время выполнения, но вы можете расширить класс коллекции, создавая его, вы можете передать класс компонента конструктору, тем самым вы можете получить тип компонента collection во время выполнения.. Вот образец;

class GenericList<T> extends ArrayList<T> {
private Class<T> componentClasz;

public GenericList(Class<T> clasz){
    super();
    componentClasz = clasz;
}

public Class<T> getComponentClasz() {
    return componentClasz;
}

}

GenericList<String> list = new GenericList<String>(String.class);
1 голос
/ 22 марта 2011

Тип списка был удален при компиляции списка.

Кроме того, строка не может быть просто "преобразована" в любое значение в произвольном порядке.Например, в случае сбоя преобразования какое целочисленное значение подходит для слова "привет"?

Если вы хотите получить список, который может содержать любой объект Java, используйте Список .

0 голосов
/ 22 марта 2011

Вы должны изучить объект (ы) списка, а не сам список. Поскольку в Java используется безопасное стирание типов, а не повторение, нет способа отразить универсальный тип списка (или любую другую коллекцию Java в этом отношении).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...