Kotlin(十一)之注解

文章目录

定义

  1. Kotlin不允许注解定义注解体

    /**
     * 1. 定义注解,默认情况下,注解可修饰任何程序元素,包括类、接口、属性、方法等
     * 2. annotation class相当于定义了一个注解接口,注解接口继承kotlin.Annotation接口
     * 3. 注解的属性不能使用可空类型,因为JVM本身不允许使用null作为注解的属性值
     * 4. 注解属性值支持
     *    - 对应java基本类型的类
     *    - 字符串
     *    - 类
     *    - 枚举
     *    - 其他注解
     *    - 上面各种类型的数组
     */
    
    //不带属性
    annotation class Person1
    //带属性
    annotation class Person2(val name: String, val age:Int)
    //设置默认值
    annotation class Person3(val name: String, val age:Int = 19)
    // 多个值(数组)使用vararg
    annotation class Person4(vararg val names: String, val age:Int = 19)
    
    //注解属性之是注解,不需要加@
    annotation class City(val person: Person2)
    
    
    
    /**
     * 注解修饰主构造器,必须为主构造器添加constructor
     */
    class User @Person2(name = "jannal", age = 100) constructor(var name: String, var pass: String) {
    
        val username: String = name
        val password: String = pass
    
        @Person2(name = "jannal", age = 100)
        fun run(username: String, password: String) {
        }
    
        @Person4(names = arrayOf("jannal", "jannal2"), age = 100)
        fun run2(username: String, password: String) {
        }
    
        //使用vararg修饰不需要指定属性名
        @Person4("jannal", "jannal2", age = 100)
        fun run3(username: String, password: String) {
        }
    
        @City(person = Person2("username",19))
        fun run4(username: String, password: String) {
        }
    
    }
    
    
  2. 如果需要将一个类作为注解的属性,要使用KClass,kotlin编译器会自动将其转换为java Class,以便java代码能够正常看到该注解和参数

    annotation class Monitor(val arg1: KClass<*>, val arg2: KClass<out Any>)
    
    @Monitor(arg1 = String::class, arg2 = Int::class)
    class RequestController
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值