Kotlin注解深入解析与实例剖析

在上一次https://www.cnblogs.com/webor2006/p/11522798.html中学习了Kotlin注解相关的东东,这次继续对Kotlin的注解继续学习:

注解也可以拥有自己的构造方法,并且构造方法也可以接收参数,注解构造方法所允许的参数类型:

1、与Java原生类型所对应的类型(Int, Long..)

2、字符串:string

3、classes (MyClass::class)

4、枚举:enums

5、其他的注解

6、上述类型的数组类型

下面看下代码:

 

接着再来定义一个,可以将一个注解做为另一个注解的构造参数:

Kotlin的注解参数是不允许为可空类型的,因为JVM不支持以null的形式存储注解属性值的。如果某个注解被用作其他注解的参数,那么其名字就不需要以@字符开头。

如果需要将某个class作为注解的参数,那么请使用Kotlin class(KClass),因为Kotlin编译器会自动将其转换为Java Class,这样Java代码就可以正常看到注解与参数了,下面瞅一下KClass:

下面来写个例子:

注解使用处目标(use-site target):

在对类的属性或是主构造方法的参数声明注解时,会存在多个Java元素都可以通过对应的Kotlin元素生成出来,因此,在所生成的Java字节码中,就会存在多个可能的位置来生成相应的注解,若想精确指定如何来生成注解,那么可以使用注解的使用处目标方式来实现。

上面说得有点抽象,用代码来具化一下:

 

 

其实对于当前的文件,也可以指定注解,如:

我们知道编写的一个Kotlin文件在编译成class文件会按文件名+kt.class规则来生成,如:

编译一下:

此时我们就可以通过文件的注解改掉这个规则,如下:

其中可以看一下JvmName其实就是一个注解:

 

这样就可以动态的去改成我们想要规则的class名称。

以上就是关于Kotlin的注解相关的东东,注意:它跟Java的注解是百分之百兼容滴~

posted on 2019-09-16 22:05  cexo  阅读(983)  评论(0编辑  收藏  举报

导航