【问题标题】:Assign single element to an IntArray value attribute in Kotlin annotations在 Kotlin 注释中将单个元素分配给 IntArray 值属性
【发布时间】:2018-04-23 03:53:34
【问题描述】:

我有一个自定义注释声明为

@Target(AnnotationTarget.FUNCTION)
annotation class Anno(val value: IntArray, val attr2: Int = 0)

对于单个元素声明,我可以在 Java 类中使用上述注释作为

@Anno(1)

但是在 Kotlin 类中编写相同的代码时,我必须加上括号

@Anno([1])

在这种情况下括号不是不必要的还是我声明注释错误?我正在使用 Kotlin 版本 1.2.0-rc-39

【问题讨论】:

    标签: annotations kotlin


    【解决方案1】:

    是的,方括号 (Kotlin 1.2+) 或 arrayOf (Kotlin 1.2-) 是必需的。

    但只要这是您用 Kotlin 编写的注释,您就可以使用它来执行 fancy things,例如使用 lambda 或 varargs,因此您可以尝试根据需要调整生成的语法。例如,这将是有效的语法,即使在 Kotlin 1.2-:

    @Target(AnnotationTarget.FUNCTION)
    annotation class Anno(
        val attribute: String,
        vararg val value: Int
    )
    
    @Anno("test", 1, 2, 3)
    fun test() = 42
    

    您需要将vararg 参数放在末尾。

    【讨论】:

    • 谢谢,我错过了可变参数修饰符。这按预期工作
    猜你喜欢
    • 2019-11-20
    • 2010-11-29
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-06
    • 2012-04-14
    相关资源
    最近更新 更多