小编Chr*_*ann的帖子

在 Kotlin 中扩展 Java 类时继承的平台声明发生冲突

我正在尝试使用 Kotlin 扩展第三方 Java 类,但收到以下编译器消息:

继承的平台声明冲突:以下声明具有相同的 JVM 签名 (setCollection(Ljava/util/Collection;)V):

  • fun setCollection(collection:(Mutable)Collection<(raw)Any?>!: 在 KotlinClass 中定义的单位

  • fun setCollection(collection:(Mutable)Collection<String!>!):KotlinClass 中定义的单位

无论我做什么,都无法仅使用 Kotlin 代码对其进行编译。

重现情况的代码:

//JavaInterface.class
import java.util.Collection;

public interface JavaInterface {
    void setCollection(Collection<String> collection);
}

//JavaBaseClass.class
import java.util.Collection;

public class JavaBaseClass {
    public void setCollection(Collection collection){}
}

//JavaSubClass.class
public class JavaSubClass extends JavaBaseClass implements JavaInterface {}

//KotlinClass.kt
class KotlinClass : JavaSubClass() 
Run Code Online (Sandbox Code Playgroud)

Java本身不存在这个问题。所以我的猜测是这可能与平台类型有关(String!不是Any?)。

是否有一个优雅的解决方法来解决这个问题,并且最好不涉及编写Java代码?或者应该在 Kotlin 编译器本身中修复这个问题?

inheritance java-interop kotlin

5
推荐指数
1
解决办法
2053
查看次数

标签 统计

inheritance ×1

java-interop ×1

kotlin ×1