为什么这个Kotlin方法有封闭反引号?

Kri*_*ofe 37 java methods keyword backticks kotlin

在下面的片段中使用了什么反引号?

为什么要将它们添加到fun is(amount:Int ):Boolean { ... }

verifier.`is`(amount)
Run Code Online (Sandbox Code Playgroud)

Li3*_*357 52

这是因为isKotlin中的保留关键字.由于Kotlin应该与Java可互操作并且is是Java 中的有效方法(标识符)名称,因此反引号用于转义方法,以便可以将其用作方法而不会将其作为关键字混淆.没有它它将无法工作,因为它将是无效的语法.

在Kotlin文档中突出显示:

转义为Kotlin中关键字的Java标识符

一些科特林关键字在Java有效标识符:in,object,is等.如果一个Java库使用科特林关键字的方法,你仍然可以调用该方法与反引号转义它(')字符

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

  • 我还想补充一点,“在野外”,这通常用于在其中包含带有空格的_标识符名称,[示例](/sf/answers/4126868931/)。 (2认同)

wer*_*ero 5

它允许您调用名称为Kotlin关键字的Java方法。如果您遗忘了反引号,它将无法正常工作。


Gho*_*ica 5

反引号是一种“替代方法”,可让您调用名称代表Kotlin关键字的方法。

参见kotlinlang

某些Kotlin关键字在Java中是有效的标识符:in,object,is等。如果Java库对方法使用Kotlin关键字,您仍然可以调用该方法,并使用反引号(`)字符对其进行转义。


Yog*_*ity 5

对测试有用

反引号在测试长函数名时非常有用:

@Test
fun `adding 3 and 4 should be equal to 7`() {
    assertEquals(calculator.add(3, 4), 7)
}
Run Code Online (Sandbox Code Playgroud)

这使得函数名称更具可读性。我们可以在函数名称中添加空格和其他特殊字符。但是,请记住仅在测试中使用它,它违反了常规代码的 Kotlin 编码约定。