【发布时间】:2018-04-09 21:41:58
【问题描述】:
我的团队正在为我们的 Android 应用迁移到 Kotlin,但我们仍然有很多遗留的 Java 代码,这有时会导致奇怪的代码问题。这是其中一种奇怪的情况。
我有一个 Kotlin 类,称之为 MyInterface:
interface MyInterface {
fun onMyObjectList(myObjectList: List<MyObject>)
}
我需要在一个Activity中实现这个接口,用Java写的:
class MyActivity implements MyInterface {
...
}
以下是我在 Java 中实现被覆盖方法的方法:
@Override
public void onMyObjectList(@NotNull List<MyObject> objectList) {
}
我确实想得到一个List<MyObject> 作为参数,但是 IDE 抛出了一个错误
MyActivity 中的
onMyObjectList(List<MyObject> objectList)与 MyInterface 中的onMyObjectList(List<? extends MyObject> objectList)发生冲突。两种方法都有相同的擦除,但都没有覆盖另一个
我不能使用List<? extends MyObject> 作为参数,因为我将它进一步传递给需要List<MyObject> 的方法。如何配置我的 Kotlin 接口,以便在 Java 中被覆盖时它实际上使用 List<MyObject> 而不是 List<? extends MyObject>?
【问题讨论】:
-
我偶然尝试重现此错误消息,但不能。您能否添加工具/等版本的详细信息?你用的是什么?
-
Android Studio 3.1,Kotlin 插件版本:1.2.31-release-Studio3.1-1。 Android目标SDK:27,编译SDK:27,构建工具版本:27.0.3
-
我目前不在电脑前,但如果我没记错的话,Kotlin 的
List被声明为List<out E>,看看你怎么不能使用? extends MyObject,你不能定义使用 Kotlin 的MutableList或 Java 的List的接口?或者这不是一个选择?一年多没用 Kotlin 了,不了解的还请见谅。 -
我同意
MutableList,我认为这是不变的? -
@VinceEmigh 这确实有效,尽管我对在 Kotlin 中使用 java 集合有点警惕。 MutableList 成功了!
标签: java android kotlin interop