Подтвердить что ты не робот

Как создать экземпляр объекта с использованием дженериков с фреймворком Spring?

У меня есть класс, который выглядит так:

class Dao<T>{
...
}

Я хочу сделать это:

new Dao<Student>();

из конфигурации XML Spring.

Можно ли это сделать? Как?

4b9b3361

Ответ 1

Внимательно прочитайте тип erasure, чтобы вы поняли это немного лучше.

Во время выполнения параметры типа для общего класса стираются. Значение, как сказал cletus, generics в Java - это в основном синтаксический сахар - они всего лишь функция времени компиляции.

Так как Spring является экземпляром объектов во время выполнения, он фактически может создавать экземпляр Dao любого типа - и фактически нет ничего, что помешало бы ему создать Dao и передать в Student типы в некоторых методах и Teacher типы в другом.

Итак, в основном ответ: Spring не знает, что тип Dao предназначен для параметризации и ничего не может с ним поделать.

Ответ 2

Вы не можете этого сделать, и причина, по которой вы не можете этого сделать, состоит в том, что на самом деле это ничего не значит. Под этим я подразумеваю, что дженерики Java являются синтаксическим сахаром, поэтому тип, который вы создаете bean, не имеет значения. Вы можете вводить его во что угодно, принимая Dao (или Dao) просто отлично, в этот момент он будет использовать неявное литье любого типа, в которое он был введен.