在上一次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的注解是百分之百兼容滴~