gpt4 book ai didi

java - 使用 Java 接口(interface)时的 Kotlin 接口(interface)实现行为

转载 作者:行者123 更新时间:2023-12-02 12:41:08 33 4
gpt4 key购买 nike

如果我在 Kotlin 中有一个接口(interface):

interface KotlinInterface {
val id: String
}

我可以这样实现:

class MyClass : KotlinInterface {
override val id: String = "id"
}

但是,如果我要像这样使用 Java 接口(interface):

public interface JavaInterface {
String id = "id";
}

我不能以类似的方式覆盖 id 类变量:

class MyClass : JavaInterface {
override val myId: String = JavaInterface.id //linter says: 'myId' overrides nothing
}

我也不能在别处使用 id,尽管它有预定义的值:

class MyClass : JavaInterface {
val myArray: Array<String> = arrayOf(id) // linter would say that id is not defined rather than recognising it as the string “id”
}

看来我必须像这样使用它:

class MyClass {
val id: String = JavaInterface.id
val myArray: Array<String> = arrayOf(id)
}

谁能解释这种行为差异并指出我可能理解错误的地方?

最佳答案

在java接口(interface)中,每一个变量都是static final变量,static变量是不能被重写的。这就是您看到该 lint 警告的原因。

编辑 1:

Kotlin 界面

  interface Ser {
var name: String //abstract
}

相当于java接口(interface)

public interface Ser {
@NotNull
String getName();

void setName(@NotNull String var1);
}

关于java - 使用 Java 接口(interface)时的 Kotlin 接口(interface)实现行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59853659/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com