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中所做的只是使用隐式通配符。 所以你有两种方法:
- 尝试重构API并注入List>列表
- 使用注入
List
但明确地把它转换成你需要的东西,即> myClassList as List
>
这里的事情是kotlin的删除更明确。 如果你不知道什么types,那么我们不能保证你的代码能正常工作,因为在kotlin中有这样一个types的Nothing
,它的实例不能存在。