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中的接口更容易吗?

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

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

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