【发布时间】:2010-06-03 10:47:22
【问题描述】:
我想我可能是类型擦除的受害者,但我想我会先在这里与其他人核实。
我需要做这样的事情:
public interface FooFactory {
public <T extends Bar> Foo<T> createFoo( Class<T> clazz );
}
编写这段代码是完全有效的。但是,我正在尝试使用 Spring BeanFactory 来实现此功能,但我做不到。
我想做的是这个……
public class FooFactoryImpl implements BeanFactoryAware {
private BeanFactory beanFactory;
public <T extends Bar> Foo<T> createFoo( Class<T> clazz ) {
return beanFactory.getBean( ????????? );
}
public void setBeanFactory( BeanFactory beanFactory ) {
this.beanFactory = beanFactory;
}
}
如你所见,我已经加入了?????????我想检索Foo<T> 类型的bean,其中T 扩展了Bar。但是,不可能派生 Foo<T> 类型的 Class 对象,所以我认为我想要做的事情是不可能的?
还有其他人看到解决此问题的方法或实现我正在尝试做的替代方法吗?
谢谢,
安德鲁
【问题讨论】:
-
clazz参数是干什么用的? -
你为什么要尝试使用 bean factory?当然可以使用标准的 Spring 配置来实现这一点?
-
@Rob 人们有时会使用 bean 工厂来更好地控制生命周期,而不是仅仅控制惰性,或者利用原型来获取多个实例。
-
@Mar 我认为它可以提示编译器 T 是什么,因为在参数列表中没有 T 对象或 x
对象。但我很容易起雾。