如何在Spring框架中实例化使用泛型的Object?

fly*_*ire 37 java generics spring

我有一个看起来像这样的课程:

class Dao<T>{
...
}
Run Code Online (Sandbox Code Playgroud)

我想做这个:

new Dao<Student>();
Run Code Online (Sandbox Code Playgroud)

来自Spring XML配置.

可以这样做吗?怎么样?

mat*_*t b 55

阅读关于类型擦除应该会帮助您更好地理解这一点.

在运行时,擦除泛型类的类型参数.正如cletus所说,Java中的泛型基本上是语法糖 - 它们只是编译时的特性.

由于Spring在运行时是实例化对象,因此它实际上可以自由地实例化Dao任何类型 - 实际上,没有什么能阻止它在另一个方法和类型中创建Dao和传入Student类型Teacher.

所以基本上答案是,Spring不知道该Dao类型是为了参数化而且不能对它做任何事情.


cle*_*tus 8

你不能这样做,你无法做到的原因是它实际上没有任何意义.我的意思是Java泛型是语法糖,所以你创建一个bean的类型是无关紧要的.你可以把它注入任何一个Dao(或Dao)就好了,在这一点上它将使用它注入的任何类型的隐式转换.