我的团队正在为我们的Android应用程序迁移到Kotlin,但我们仍然有很多遗留的Java代码,这有时会导致奇怪的代码问题。这是一个奇怪的案例。
我有一个Kotlin类,称之为MyInterface:
interface MyInterface {
fun onMyObjectList(myObjectList: List<MyObject>)
}
我需要在一个用Java编写的Activity中实现这个接口:
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>
?
答案 0 :(得分:0)
如果任何方法确实改变了列表或合理地改变了列表,那么使用MutableList
确实是正确的解决方案。
但是否则,如果 计划最终迁移到Kotlin并且此时无法更改另一种方法List<? extends MyObject>
,我只想使用
@Override
public void onMyObjectList(@NotNull List<? extends MyObject> objectList) {
}
并在传递给遗留方法之前强制转换为List<MyObject>
。这是1)如果你不改变列表的安全演员和2)运行时完整的非操作(因此它不会影响性能)。