为什么 Kotlin 数据类对象有反引号?

Man*_*ath 5 android keyword backticks kotlin data-class

这是我使用 Kotlin 数据类创建器插件创建的数据类。

data class ResponseHealthInisghts(
val `data`: List<Data>,
val message: String,
val statusCode: Int
)
Run Code Online (Sandbox Code Playgroud)

即使我删除了反引号,这段代码也能工作,我想知道它是否是为了 Java 互操作性。但是这个变量不是关键字,但它也有反引号。为什么?基于为什么这个 Kotlin 方法有封闭的反引号? 这个问题is是 Java 和 Kotlin 的关键字,但data不是。

use*_*900 5

您可以简单地使用反引号来括起类、方法或变量名称

例如,如果有空格,它很有用:

class `Final Frontier` {
    fun `out of space`() {
        val `first second`: String?
    }
}
Run Code Online (Sandbox Code Playgroud)

或者正如您提到的,如果使用Kotlin 关键字

如果 Java 库的方法使用 Kotlin 关键字

foo.`is`(bar)
Run Code Online (Sandbox Code Playgroud)

data是一个修饰关键字

data 指示编译器为类生成规范成员 以下标记充当声明修饰符列表中的关键字,并且可以在其他上下文中用作标识符

而不是不能用作标识符的硬关键字

以下标记始终被解释为关键字,不能用作标识符


Man*_*ath 0

基于这个问题的答案为什么这个 Kotlin 方法有反引号? 以及@forpas 和@marstran 的评论我能够理解我的问题。

is关键字是硬关键字

硬关键字 始终被解释为关键字,不能用作标识符:

因此,在互操作性之前,我们需要使用反引号,因为 Java 和 Kotlin 都有is关键字。

其中data关键字仅适用于Kotlin并且也属于该类别

软关键字 在适用时在上下文中充当关键字,并且可以在其他上下文中用作标识符。

所以我们可以使用带或不带反引号的它。

另外,作为附加说明,您可以使用 bacticks 来自定义您的标识符

var `data is simple` : List<String>
Run Code Online (Sandbox Code Playgroud)

如果显示 lint 错误,请使用

“文件|设置|编辑器|检查|非法Android标识符”并禁用此检查。