Как создать экземпляр объекта, который использует дженерики со средой Spring? - PullRequest
37 голосов
/ 18 февраля 2009

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

class Dao<T>{
...
}

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

new Dao<Student>();

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

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

Ответы [ 2 ]

55 голосов
/ 18 февраля 2009

Чтение о типе стирания должно помочь вам понять это немного лучше.

Во время выполнения типовые параметры для универсального класса стерты . То есть, как сказал Клетус, дженерики в Java - это, по сути, синтаксический сахар - они являются только функцией времени компиляции.

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

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

8 голосов
/ 18 февраля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...