使用下面的代码,我在IntelliJ IDEA 13.1.6和Kotlin插件0.11.91.AndroidStudio.3中得到了以下错误:
Platform declaration clash: The following declarations have the same JVM signature (getName()Ljava/lang/String;):
• public open fun getName(): kotlin.String?
• internal final fun <get-name>(): kotlin.String?
Java类,JavaInterface.java
public interface JavaInterface {
public String getName();
}
Kotlin类,KotlinClass.kt
public class KotlinClass(val name: String?) : JavaInterface
我试图通过添加override fun getName(): String? = name
来重写'getter‘方法,但是产生了同样的错误。
我可以通过执行以下操作来查看一种解决方法:
public class KotlinClass(val namePrivate: String?) : JavaInterface {
override fun getName(): String? = namePrivate
}
但在我的实际案例中,我有许多属性需要实现,并且还需要setter。为每个属性执行此操作看起来不太像Kotlin。我遗漏了什么?
发布于 2017-06-23 18:52:28
将该变量设为private
可以解决这个问题。
public class KotlinClass(private val name: String?) : JavaInterface
发布于 2019-12-02 16:14:12
@JvmName
的注释特性将解决Java和Kotlin具有相同签名时的重复问题。
fun function(p: String) {
// ...
}
// Signature: function(Ljava/lang/String)
使用JvmName
将会:
@JvmName("functionOfKotlin")
fun function(p: String) {
// ...
}
// Signature: functionOfKotlin(Ljava/lang/String)
发布于 2019-02-08 19:31:44
我认为最具可读性的组合是字段+单表达式函数的显式接口实现( @Renato Garcia的答案和@Steven Spungin的答案的组合):
Java:
public inteface SomeInterface {
String getFoo();
}
Kotlin:
class Implementation(@JvmField val foo: String) : SomeInterface {
override fun getFoo() = foo
}
https://stackoverflow.com/questions/29268526
复制相似问题