Передать класс с параметром в класс

#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 . Поэтому лучшее, что он может сделать, это вернуть необработанный тип.