我正在尝试使用 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()
Java 本身没有这个问题。所以我的猜测是这可能与平台类型有关(String!
不是Any?
)。
是否有针对此问题的优雅解决方法,最好不涉及编写 Java 代码?或者这应该在 Kotlin 编译器本身中修复吗?