【问题标题】:Use Kotlin annotation class in Java class在 Java 类中使用 Kotlin 注解类
【发布时间】:2018-07-06 11:33:44
【问题描述】:
我正在用 Kotlin 编写新功能,但有些东西已经用 Java 编写了。
我正在 Mockito(Kotlin) 中编写测试,但 Mockito 的最终类有问题,所以我创建了:
annotation class Mockable {}
并添加到Gradle-build:
apply plugin: 'kotlin-allopen'
allOpen {
annotation('com.Mockable')
}
所以使用这个注解类我可以模拟Kotlin 类。
如何在 Java 类中使用这个注解?
【问题讨论】:
标签:
java
android
kotlin
annotations
mockito
【解决方案1】:
Java 中不需要它。但不管怎样,还有一种替代方法可以将 Mockito 与 Kotlin 一起使用:
创建一个文件src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker,内容如下:
mock-maker-inline
这改变了模拟行为以支持final 类,如 Kotlin 类。对于某些 Java 类,我不得不在之后使用 spy() 而不是 mock()。
【解决方案2】:
如何在 Java 类中使用这个注解?
您不能以这种方式使用此注解,因为kotlin-allopen 仅适用于 Kotlin 类。在 Java 中,只是不要将类标记为 final...
就此而言,在 Kotlin 中,如果我理解正确的话,它似乎也没有用:kotlin-allopen 用于以某种方式处理注释时需要创建带注释类型的子类,所以你' d 需要写open以及注解。在这里,你可以写open 而不是 @Mockable。