#java #generics
#java #generics
Вопрос:
У меня есть метод, который выглядит как
doSomething( Class<T> valueType)
я вызываю значение передачи, подобное
Map.class , Long.class
в качестве параметра в вышеуказанный метод. Если я хочу использовать generic. как я должен передать значение в вышеупомянутый метод? doSomething(Class<Map>);
не работает
Комментарии:
1.
Class<Map>
это тип, а не переменная.2. возможно, вы пытаетесь? doSomething(класс<? расширяет T> clazz); если вы пытаетесь применить класс maps. Хотя я не совсем уверен, что вам нужно. <T> — это класс generic. Оператор List<Long> обеспечивает принудительное выполнение type <Long>, Class<T> обычно являются заводскими методами некоторого рода, создающими экземпляры классов. Прочитайте документацию — это лучший выбор для вас.
Ответ №1:
Map.class
возвращает объект типа Class<Map>
, Long.class
возвращает объект типа Class<Long>
.
Итак, чтобы передать Map.class
ваш T, мне нужна карта. Если вы хотите, чтобы ваш T был универсальным, скажем ArrayList<String>
, то это невозможно. Причина в том, что generics в Java используют стирание типов, что означает, что универсальный тип присутствует только во время компиляции, но он стирается во время выполнения. Таким образом, не существует чего-то подобного ArrayList<String>.class
.
В этом смысле дженерики Java сильно отличаются от дженериков C #.