使用下面的代码,我在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?
Run Code Online (Sandbox Code Playgroud)
Java类,JavaInterface.java:
public interface JavaInterface {
public String getName();
}
Run Code Online (Sandbox Code Playgroud)
科特林班, KotlinClass.kt
public class KotlinClass(val name: String?) : JavaInterface
Run Code Online (Sandbox Code Playgroud)
我已经尝试通过添加来覆盖'getter'方法override fun getName(): String? = name,但这会产生相同的错误.
我可以通过这样做来看到一种解决方法:
public class KotlinClass(val namePrivate: String?) : JavaInterface {
override fun getName(): String? = namePrivate
}
Run Code Online (Sandbox Code Playgroud)
但在我的实际案例中,我有许多属性要实现,也需要setter.对每个房产这样做似乎不是很Kotlin-ish.我错过了什么?
小智 39
使该变量private解决问题.
public class KotlinClass(private val name: String?) : JavaInterface
Mah*_*alv 16
Kotlin的named注解功能@JvmName将解决Java和Kotlin中具有相同签名时的重复问题。
fun function(p: String) {
// ...
}
// Signature: function(Ljava/lang/String)
Run Code Online (Sandbox Code Playgroud)
与使用JvmName将是:
@JvmName("functionOfKotlin")
fun function(p: String) {
// ...
}
// Signature: functionOfKotlin(Ljava/lang/String)
Run Code Online (Sandbox Code Playgroud)
截至 2023 年 5 月,这不适用于接口
您可以使用 @JvmField 指示编译器不生成 getter/setter,并且您可以实现您的 setter 和 getter。有了这个,您的代码在 Java(作为属性 getter/setter)和 Kotlin 作为属性运行良好
示例: JAVA:
public interface Identifiable<ID extends Serializable>
{
ID getId();
}
Run Code Online (Sandbox Code Playgroud)
科特林:
class IdentifiableImpl(@JvmField var id: String) :Identifiable<String>
{
override fun getId(): String
{
TODO("not implemented")
}
}
Run Code Online (Sandbox Code Playgroud)
恕我直言,最可读的组合是单表达式函数的字段+显式接口实现(@Renato Garcia 和 @Steven Spungin 的答案的组合):
爪哇:
public inteface SomeInterface {
String getFoo();
}
Run Code Online (Sandbox Code Playgroud)
科特林:
class Implementation(@JvmField val foo: String) : SomeInterface {
override fun getFoo() = foo
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12962 次 |
| 最近记录: |