当尝试将代码从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'
?
答案 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)`