【发布时间】:2017-05-10 13:13:18
【问题描述】:
我有一个第三方 java 库,其类如
public class ThirdParty {
public String getX() {
return null;
}
}
我在 kotlin 中也有类似的界面
interface XProvider {
val x: String?
}
现在我想扩展ThirdParty 类并实现XProvider 接口。这在我的遗留 Java 代码中运行良好:
public class JavaChild extends ThirdParty implements XProvider {}
但是,我想尽可能多地编写 kotlin,并尝试将我的 java 类转换为 kotlin。遗憾的是,以下方法不起作用:
class KotlinChild: ThirdParty(), XProvider
错误是
class 'KotlinChild1' must be declared abstract or implement abstract member public abstract val x: String? defined in XProvider
但是,如果我做类似的事情
class KotlinChild1: ThirdParty(), XProvider {
override val x: String? = null
}
我明白了
error: accidental override: The following declarations have the same JVM signature (getX()Ljava/lang/String;)
fun <get-x>(): String?
fun getX(): String!
override val x: String? = null
有效的是以下丑陋的解决方法:
class KotlinChild: JavaChild()
【问题讨论】:
-
你得到什么错误?
-
抱歉,忘记了。我更新了问题
-
根据那里的答案,如果没有丑陋的 java 解决方法,这是不可能的。那会有点糟糕。