【发布时间】:2022-01-05 23:54:13
【问题描述】:
免责声明:Kotlin 新手,可能是一个容易解决的问题或被误解的基础知识。
我正在尝试注入一个特定接口的 Spring 实现的列表,在一个常规的 java 类中,这很容易,如下所示:
@Autowired
List<IMyClass> myClassList;
但在 Kotlin 中执行以下操作会给我一个错误
@Autowired
lateinit private var myClassList: List<IMyClass<Any>>
// No beans of '? extends IMyClass<Object>' or 'List<? extends IMyClass<Object>>' 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'
那么我应该如何解决这个问题?用一些特定的语法在 Kotlin 中重写接口是否更容易?
【问题讨论】:
-
这个 java 版本不是类型安全的,因为你只是省略了类型信息。我会对 List bean 的外观感兴趣吗?
-
@s1m0nw1我正在替换带注释的值,列表中的接口只有一个函数,它接受 T,查看它并返回不同的 T 值。
-
可以添加
IMyClass接口的定义吗?不是方法,是标题。 -
@ESala 你的意思是这样吗?接口 IMyClass
{
标签: spring generics dependency-injection kotlin