为什么它必须是科特林的`is`

时间:2019-01-03 15:43:24

标签: kotlin matcher

当尝试将代码从Java转换为kotlin以进行浓缩测试时,

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'

2 个答案:

答案 0 :(得分:1)

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的文档:

  

一些Kotlin关键字是Java中的有效标识符:对象等。如果Java库使用Kotlin方法的关键字,您仍然可以使用反引号(`)字符来调用该方法,使其转义:

foo.`is`(bar)

答案 1 :(得分:1)

在Kotlin中,标识符也是hard keywords(但不是软标识符)have to be backticked

如果要避免反引号,可以使用其他名称为其创建实用程序扩展功能:

fun <T> Matcher<T>.isA(value: T) = `is`(value)`