Kotlin可重复的@annotations不适用于jdk-8

时间:2017-06-14 11:50:16

标签: annotations kotlin

我已在中声明了可重复的注释@Parameter,如下所示:

@Repeatable
annotation class Parameter(val name: String);

但是当我在下面使用它时,编译器报告错误:

  

只有具有SOURCE保留的注释才能在1.8之前的JVM版本上重复

@Parameter("foo")
@Parameter("bar")
fun repeat() = 1;

我确定我在中使用jdk-8jvmTarget gradle插件的选项1.8也设置为kotlin-1.1.2

问:为什么它不能正常工作?

sourceCompatibility = 1.8
targetCompatibility = 1.8

compileKotlin {
    kotlinOptions{
        jvmTarget = "1.8"
    }
}

4 个答案:

答案 0 :(得分:1)

如果我没弄错的话, Kotlin 编译器目前的目标是JDK 1.6类文件格式。这意味着,在 Java 上,它无法将多个注释写入类文件。

虽然概念 Kotlin 支持多个注释,但在适当的1.8定位之前,由于输出限制,它不能这样做。

答案 1 :(得分:0)

检查IntelliJ中的Kotlin编译器设置。默认情况下,IntelliJ不使用gradle来构建和运行项目。它使用IDEA Kotlin插件。

答案 2 :(得分:0)

Kotlin目前无法实现。打开了一个错误,请随时投票支持:https://youtrack.jetbrains.com/issue/KT-12794

答案 3 :(得分:0)

是的,你可以。只需使用注释的“长格式”即可。

关注本帖的结尾: https://discuss.kotlinlang.org/t/issue-with-repeated-java-8-annotations/1667/11