带有可选参数的Kotlin批注

时间:2019-12-23 09:57:11

标签: kotlin annotations

自定义注释定义如下:

@Target(AnnotationTarget.FUNCTION)
@Retention(AnnotationRetention.RUNTIME)    
annotation class Custom(val a: String, 
        val b: String = "[null]", 
        val c: String = "[null]")

所需用法:

1。

@Custom(a = "Testa", b = "Testb", c = "Testc")
fun xyz(){ ... }

2。

@Custom(a = "Testa")
fun pqr(){ ... }

当我尝试使用#2时,它会抛出No values passed for parameter "b"

如何在kotlin cusotm批注中具有可选参数?

2 个答案:

答案 0 :(得分:0)

像这样尝试:

@Target(AnnotationTarget.FUNCTION)
@Retention(AnnotationRetention.RUNTIME)    
annotation class Custom(val a: String, 
        @Optional val b: String, 
        @Optional val c: String)

编辑:您可以遵循以下问题: https://github.com/Kotlin/kotlinx.serialization/issues/19

答案 1 :(得分:0)

您的代码按原样工作,可以通过以下方式验证

@Target(AnnotationTarget.FUNCTION)
@Retention(AnnotationRetention.RUNTIME)    
annotation class Custom(val a: String, 
        val b: String = "[null]", 
        val c: String = "[null]")

object W {
    @Custom(a = "Testa")
    fun pqr(){}
}

fun main(args: Array<String>) {
    println(W::class.java.getMethod("pqr").getAnnotations()[0])
}

打印@Custom(b=[null], c=[null], a=Testa),因此bc获得了默认值。 (您也可以写W::pqr.annotations[0],但这在操场上不起作用。)