为什么它必须是 Kotlin 中的“is”?
Why does it have to be the`is` in Kotlin?
尝试将代码从 Java 转换为 Kotlin 以进行 Espresso 测试时,
Java代码:
onData(allOf(is(instanceOf(String.class)), is("Americano")))
.perform(click());
Kotlin 代码:
onData(allOf(`is`(instanceOf(String::class.java)),
`is`("Americano"))).perform(click())
'is'
实际上是:
public static <T> Matcher<T> is(T value) {
return Is.is(value);
}
为什么它的语法在 Kotlin 中变成 'is'
?
is
是 Kotlin 中的保留关键字。为了与 Java 和其他可以像 Kotlin 中的保留字一样命名字段或方法的编程语言的互操作性,我们使用 反引号 来转义名称。例如,在您的案例中,来自 Java 的方法 is
使用反引号转义:
onData(allOf(`is`(instanceOf(String::class.java)),
`is`("Americano"))).perform(click())
使用Mockito库的when
方法转义的另一个例子:
Mockito.`when`(/*some method is called*/).thenReturn(/*return some result*/)
关于 Calling Java code from Kotlin 的文档:
Some of the Kotlin keywords are valid identifiers in Java: in, object, is, etc. If a Java library uses a Kotlin keyword for a method, you can still call the method escaping it with the backtick (`) character:
foo.`is`(bar)
在 Kotlin 中,标识符也是 hard keywords (but not soft ones) have to be backticked。
如果你想避免反引号,你可以使用不同的名称为它创建一个实用程序扩展函数:
fun <T> Matcher<T>.isA(value: T) = `is`(value)`
尝试将代码从 Java 转换为 Kotlin 以进行 Espresso 测试时,
Java代码:
onData(allOf(is(instanceOf(String.class)), is("Americano")))
.perform(click());
Kotlin 代码:
onData(allOf(`is`(instanceOf(String::class.java)),
`is`("Americano"))).perform(click())
'is'
实际上是:
public static <T> Matcher<T> is(T value) {
return Is.is(value);
}
为什么它的语法在 Kotlin 中变成 'is'
?
is
是 Kotlin 中的保留关键字。为了与 Java 和其他可以像 Kotlin 中的保留字一样命名字段或方法的编程语言的互操作性,我们使用 反引号 来转义名称。例如,在您的案例中,来自 Java 的方法 is
使用反引号转义:
onData(allOf(`is`(instanceOf(String::class.java)),
`is`("Americano"))).perform(click())
使用Mockito库的when
方法转义的另一个例子:
Mockito.`when`(/*some method is called*/).thenReturn(/*return some result*/)
关于 Calling Java code from Kotlin 的文档:
Some of the Kotlin keywords are valid identifiers in Java: in, object, is, etc. If a Java library uses a Kotlin keyword for a method, you can still call the method escaping it with the backtick (`) character:
foo.`is`(bar)
在 Kotlin 中,标识符也是 hard keywords (but not soft ones) have to be backticked。
如果你想避免反引号,你可以使用不同的名称为它创建一个实用程序扩展函数:
fun <T> Matcher<T>.isA(value: T) = `is`(value)`