当前位置:嗨网首页>书籍在线阅读

14-与Java注解互调

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

10.2.5 与Java注解互调

因为Kotlin在语法上是完全兼容Java的,所以自然也可以在Kotlin中使用Java的注解。代码如下。

import org.junit.Test
import org.junit.Assert.*
import org.junit.Rule
import org.junit.rules.*
class Tests {
    // 将 @Rule 注解应用于属性 getter
    @get:Rule val tempFolder = TemporaryFolder()
    @Test fun simple() {
        val f = tempFolder.newFile()
        assertEquals(42, getTheAnswer())
    }
}

因为Java编写的注解没有定义参数顺序,所以不能使用常规函数调用语法来传递参数,但可以使用命名参数语法来调用。代码如下。

// Java
public @interface Ann {
    int intValue();
    String stringValue();
}
//Kotlin调用Java函数
@Ann(intValue = 1, stringValue = "abc") class C

和Java一样,如果不需要显式指定value参数的名称,则可以不指定。代码如下。

// Java
public @interface AnnWithValue {
    String value();
}
//在Kotlin调用
@AnnWithValue("abc") class C

如果Java中的value参数为数组类型,那么它对应于Kotlin中的vararg类型参数。代码如下。

// Java
public @interface AnnWithArrayValue {
    String[] value();
}
//在Kotlin中调用
@AnnWithArrayValue("abc", "foo", "bar") class C

因为Java和Kotlin平台互通,所以Java注解实例的值也会作为属性暴露给Kotlin代码。代码如下。

// Java
public @interface Ann {
    int value();
}
//在Kotlin中使用Java注解实例的属性
fun foo(ann: Ann) {
    val i = ann.value
}