Spring在kotlin中注入通用接口实现列表

免责声明:Kotlin新手,可能是一个容易解决的问题或误解的基础知识。

我正在试图注入一个特定的接口的Spring实现列表,在一个普通的Java类中,这很容易,就像这样:

@Autowired List myClassList; 

但是在Kotlin做以下给我一个错误

 @Autowired lateinit private var myClassList: List<IMyClass> // No beans of '? extends IMyClass' or 'List<? extends IMyClass>' types found 

这样做:

 @Autowired lateinit private var myClassList: List<IMyClass> 

使注入工作,但不允许我使用接口中定义的函数,该函数将通用对象作为输入

 // Out-projected type 'IMyClass' prohibits the use of 'public abstract fun myFunction(obj: T!): T! defined in com.path.IMyClass' 

那么我该如何解决呢? 用一些特定的syntac来重写Kotlin中的接口更容易吗?

One Solution collect form web for “Spring在kotlin中注入通用接口实现列表”

你在Java中所做的只是使用隐式通配符。 所以你有两种方法:

  1. 尝试重构API并注入List>列表
  2. 使用注入List>但明确地把它转换成你需要的东西,即myClassList as List>

这里的事情是kotlin的删除更明确。 如果你不知道什么types,那么我们不能保证你的代码能正常工作,因为在kotlin中有这样一个types的Nothing ,它的实例不能存在。

  • 如何使用Gradle和Kotlin创建单独的测试?
  • Android Studio 3.0会添加参数提示信息吗?
  • Kotlingenerics和可空类types
  • kotlin可见性修饰符不匹配
  • Kotlin可重复@annotations不能在jdk-8上工作
  • 我怎样才能引用从Java的伴侣对象?
  • 注释处理器生成文件,但无法在应用程序中访问它们(mainActivity)
  • Kotlin文件从Jar打开而不是Project:IntelliJ
  • 如何将Kotlin列表拆成子列表?
  • 在Kotlin中可以使用Mockito吗?
  • kotlin协程 - 阻塞线程,直到收到超时或消息计数
  • Kotlin language will be the best programming language for Android.