[英]Autowire Subclasses of Generic Class
在使用Kotlin的Spring Boot 2中,我试图创建一系列组件,这些组件都扩展了通用类,但为它提供了特定类型:
abstract class Super<in T: SomeType> {
abstract fun someMethod(t: T): Boolean
}
// AnotherType and OneMoreType extend SomeType
@Component
class Sub1 : Super<AnotherType> {
override fun someMethod(t: AnotherType) = true
}
@Component
class Sub2 : Super<OneMoreType> {
override fun someMethod(t: OneMoreType) = true
}
所有这些都可以很好地编译,但是随后我想将所有这些收集到另一个组件中:
@Component
class MyService(
private val subs: List<Super<SomeType>>
)
这导致no beans
异常。
我缺少什么才能找到这些豆?
我发现的一个解决方案是接受星形投影的Super<*>
,然后在访问它时进行投射:
@Component
class MyService(
private val subs: List<Super<*>>
) {
@Suppress("UNCHECKED_CAST")
fun getSub(): List<Super<SomeType>>? = subs[0] as List<Super<SomeType>>
}
这行得通,但我不喜欢它,因为我必须进行未经检查的演员表。 我也不能进行is Super<SomeType>
,因为由于擦除,我无法确定泛型(例如,与is Super<SomeType>
)。
由于Super
具有SomeType
的范围, SomeType
它并不特别危险,只是丑陋。
建议或更好的解决方案将不胜感激。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.