构造器
注解可以使用带参数的构造器。
annotation class Special(val why: String)
@Special("example") class Foo {}
允许的参数类型是:
- 等价于Java原生数据类型的数据类型(Int,Long等)
- 字符串
- 类(Foo::class)
- 枚举
- 其他注解
- 数组类型
注解参数不能有可为空的类型,因为JVM不支持存储null作为注解属性的值。
如果注解被用作另一个注解的参数,它的名字不需要使用@前缀:
annotation class ReplaceWith(val expression: String)
annotation class Deprecated(
val message: String,
val replaceWith: ReplaceWith = ReplaceWith(""))
@Deprecated("This function is deprecated, use === instead", ReplaceWith("this === other"))
如果你需要指定类作为注解的参数,使用Kotlin的类(KClass)。Kotlin编译器会自动的将其转换为Java类,因此Java代码可以正常的查看注解和参数。
import kotlin.reflect.KClass
annotation class Ann(val arg1: KClass<*>, val arg2: KClass<out Any?>)
@Ann(String::class, Int::class) class MyClass