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

时间:2009-02-18 12:34:12

标签: java spring generics

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

class Dao<T>{
...
}

我想这样做:

new Dao<Student>();

来自Spring XML配置。

能做到吗?怎么样?

2 个答案:

答案 0 :(得分:55)

阅读type erasure可以帮助您更好地理解这一点。

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

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

所以基本上答案是,Spring不知道Teacher类型是参数化的,不能用它做任何事情。

答案 1 :(得分:8)

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