繁体   English   中英

通用类的Autowire子类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM