12-注解类的构造函数
10.2.3 注解类的构造函数
和Java一样,Kotlin的注解也接受带参数的构造函数。代码如下。
annotation class User(val name: String)
@User("name") class Foo {}
对于注解类的构造函数而言,并不是所有的数据类型都可以在构造函数中使用,允许的参数类型有以下几种。
- 与Java基本类型对应的数据类型(如Int、Long等)。
- 字符串(String)。
- KClass。
- 枚举类。
- 其他注解类。
在使用注解的构造函数时,注解参数不允许有可空类型,因为JVM暂不支持将null作为注解属性的值进行存储。下面是一些注解类构造函数参数类型使用的例子。
//构造器参数类型为String和Int
annotation class User(val name: String,val age:Int)
//参数类型是枚举
enum class MyEnum{
ONE,TWO,THREE
}
//构造器参数类型为KClass,在使用时编译器会将其转换为对应的Java类型
annotation class Person(val a: KClass<String>,val b:KClass<out Any>)
@Person(String::class,Int::class) class Demo
当然,如果在构造函数中使用不支持的数据类型,则编译时就会报错。为注解类的构造函数添加参数时,应注意以下两点。
- 参数类型只能使用val定义,而且必须是系统支持的数据类型。
- 当参数类型是另一个注解类时,注解类名前不能使用@字符作为前缀。