Как создать экземпляр объекта с использованием дженериков с фреймворком Spring?
У меня есть класс, который выглядит так:
class Dao<T>{
...
}
Я хочу сделать это:
new Dao<Student>();
из конфигурации XML Spring.
Можно ли это сделать? Как?
Ответ 1
Внимательно прочитайте тип erasure, чтобы вы поняли это немного лучше.
Во время выполнения параметры типа для общего класса стираются. Значение, как сказал cletus, generics в Java - это в основном синтаксический сахар - они всего лишь функция времени компиляции.
Так как Spring является экземпляром объектов во время выполнения, он фактически может создавать экземпляр Dao любого типа - и фактически нет ничего, что помешало бы ему создать Dao и передать в Student типы в некоторых методах и Teacher типы в другом.
Итак, в основном ответ: Spring не знает, что тип Dao предназначен для параметризации и ничего не может с ним поделать.
Ответ 2
Вы не можете этого сделать, и причина, по которой вы не можете этого сделать, состоит в том, что на самом деле это ничего не значит. Под этим я подразумеваю, что дженерики Java являются синтаксическим сахаром, поэтому тип, который вы создаете bean, не имеет значения. Вы можете вводить его во что угодно, принимая Dao (или Dao) просто отлично, в этот момент он будет использовать неявное литье любого типа, в которое он был введен.