Kotlin 注解与反射摘要

2018-11-13  本文已影响0人  蒋扬海

声明并应用注解

注解只能拥有如下类型的参数:基本数据类型、字符串、枚举、类引用、其他的注解类,以及前面这些类型的数组。指定注解实参的语法与 Java 有些微小的差别:

Kotlin 支持的使用点目标的完整列表如下:

用注解控制 Java API
Kotlin 提供了各种注解来控制 Kotlin 编写的声明如何编译成字节码并暴露给 Java 调用者。其中一些注解代替了 Java 语言中对应的关键字:比如,注解@Volatile@Strictfp直接充当了 Java 的关键字volatilestrictfp的替身。其他的注解则是被用来改变 Kotlin 声明对 Java 调用者的可见性:

你可以在这些注解的文档注释和在线文档中关于 Java 互操作的章节里找到更多它们用法的细节。

使用注解定制 JSON 序列化

JKidhttps://github.com/yole/jkid

声明注解
@Target(AnnotationTarget.PROPERTY)
annotation class JsonExclude

对拥有参数的注解来说,在类的主构造方法里声明这些参数:

annotation class JsonName(val name: String)

作为对比,下面是如何在 Java 中声明同样的注解

public @interface JsonName {
    String value();
}

使用

@JsonName(name = "first_name")`和`@JsonName("first_name")

元注解

AnnotationTarget.PROPERTY,AnnotationTarget.CLASS, AnnotationTarget.METHOD

@Retention注解
你也许在 Java 中见过另一个重要的元注解:@Retention。它被用来说明你声明的注解是否会存储到 .class 文件,以及在运行时是否可以通过反射来访问它。Java 默认会在 .class 文件中保留注解但不会让它们在运行时被访问到。而大多数注解确实需要在运行时存在,所以 Kotlin 的默认行为不同:注解拥有RUNTIME保留期。因此,JKid 中的注解没有显式地指定保留期。

上一篇 下一篇

猜你喜欢

热点阅读