出于通用性原因,我有一些具有以下主体的组件:
@Component
public class MyClass<C> extends SomeAbstractClass<A, C> {
public MyClass(SomeClass1 someClass1, SomeClass2 someClass2) {
super(superMethod(A.class, C.class));
}
}
MyClass
只是我的类的通用骨架,它们在构造函数中可能有也可能没有某些对象(由SomeClass1
和SomeClass2
表示)。抽象超类有两个类,这里 A
是显式的,它不是泛型,因此 A.class
是有效的。但 C.class
无效,因为它是一个泛型类。
所以我尝试了这个:
@Component
public class MyClass<C> extends SomeAbstractClass<A, C> {
public MyClass(SomeClass1 someClass1, SomeClass2 someClass2, Class<C> clazz) {
super(superMethod(A.class, clazz));
}
}
这段代码可以编译,但是Spring无法注入
Class<C> clazz
,我该怎么办?
编辑: 我也尝试过一些确实有效的方法,但我不太喜欢它。我为每个泛型类型创建一个类,如下所示:
@Component
public class MyClassWithoutGeneric extends SomeAbstractClass<A, B> {
public MyClassWithoutGeneric(SomeClass1 someClass1, SomeClass2 someClass2) {
super(superMethod(A.class, B.class));
}
}
我不喜欢这个解决方案的是它不是很通用,也不太可维护
谢谢
我找到了一个我更喜欢的解决方案:
我现在有一个包装类
MyClassFactory
,它具有所需的依赖项,如下所示:
@Component
public class MyClassFactory {
private final SomeClass1 someClass1;
private final SomeClass2 someClass2;
public MyClassFactory(SomeClass1 someClass1, SomeClass2 someClass2) {
this.someClass1 = someClass1;
this.someClass2 = someClass2;
}
public <C> MyClass<C> create(Class<C> clazz) {
return new MyClass<>(someClass1, someClass2, clazz);
}
}