Kotlin注释

本文概述

  • Kotlin元注释
  • 使用注释的示例
  • 声明注释
  • 注释构造函数
  • 注释财产评估员
  • 使用构造函数作为注释
  • 使用TYPE注释的示例
【Kotlin注释】注释用于在编译时将元数据附加到类, 接口, 参数等。批注可以由编译器使用, 它会在运行时反映出来。我们可以根据注释值更改数据或程序的含义。
Kotlin元注释我们可以在声明注释时添加元信息。以下是一些元注释:
注解名称 用法
@Target 它针对可以用注释注释的所有可能种类的元素。
@Retention 它指定注释是存储在已编译的类文件中, 还是在运行时通过反射可见。
@Repeatable 此元批注确定批注在单个代码元素上适用两次或多次。
@MustBeDocumented 此元文档指定注释是公共API的一部分, 应包含在类或方法中。
使用注释的示例
@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.EXPRESSION)@Retention(AnnotationRetention.SOURCE)@MustBeDocumentedannotation class MyClass

声明注释通过将注释修饰符放在类前面来声明注释。
annotation class MyClass

注释构造函数也可以注释类的构造函数。这是通过为构造函数声明添加builder关键字并将注释放在其前面来完成的。
class MyClass@Inject constructor( dependency: MyDependency){//. . . }

注释财产评估员
class MyClass{var a: MyDependency? = null@Inject set}

使用构造函数作为注释我们还可以使用构造函数作为注释。使用构造函数作为注释需要参数。
annotation class MyClass(val why: String)@MyClass("parameter") class Foo{}

用作注释的参数不能为可空类型。这是因为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类, 从而可以正常查看批注和参数。
import kotlin.reflect.KClassannotation class MyClass(val arg1: KClass< *> , val arg2: KClass< out Any> )@MyClass(String::class, Int::class) class Foo

使用TYPE注释的示例创建一个Java注释接口Ann.java
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@interfaceAnn{int value(); }

创建一个使用注释接口Ann的MyClass.kt类。
@Ann(value = http://www.srcmini.com/10)class MyClass{}fun main (args: Array< String> ){var c = MyClass()var x = c.javaClass.getAnnotation(Ann::class.java)if(x!=null){println("Value:"+x?.value)}}

输出:
Value: 10

    推荐阅读