构造器

注解可以使用带参数的构造器。

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

results matching ""

    No results matching ""