#java #generics
#java #общие
Вопрос:
Есть ли способ, которым мы можем передать тип класса с параметром в метод, который принимает Class<T>
?
Допустим, у меня есть этот метод:
общедоступный T getProperty(тип класса)
Учитывая метод, getProperty
, который возвращает любой тип, который мы передали, есть ли способ, которым я могу передать класс, например Map
, с параметром? Допустим, так:
getProperty(Map<Строка, строка>.class)
К сожалению, приведенный выше фрагмент кода выдает ошибку компиляции. Использование Map.class
будет работать, но я хотел бы исключить общее предупреждение и иметь аргумент со строгой типизацией.
Комментарии:
1. Невозможно выполнить это без приведения, которое выдает предупреждение, хотя вы можете подавить предупреждение. (Вы могли бы перепроектировать getProperty , но это звучит неубедительно в контексте.)
2. Ожидаемый ответ. Я просто надеюсь, что будет способ, но, похоже, это одно из ограничений Java. Спасибо, чувак!
Ответ №1:
На самом деле использовать аргумент со строгой типизацией бессмысленно. Потому что java удалит параметр типа во время выполнения. Все виды Map ссылаются на один и тот же объект класса.
Даже если вы можете, для getProperty(Class type)
метода не имеет значения, передаете ли вы Map.class
или Map<String,String>.class
. Поэтому лучшее, что он может сделать, это вернуть необработанный тип.