Как передать generic в этот метод

#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 #.