美文网首页
Kotlin 注解与反射摘要

Kotlin 注解与反射摘要

作者: 蒋扬海 | 来源:发表于2018-11-13 14:39 被阅读0次

声明并应用注解

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

  • 要把一个类指定为注解实参,在类名后加上::class@MyAnnotation(MyClass::class)
  • 要把另一个注解指定为一个实参,去掉注解名称前面的@。例如,前面例子中的ReplaceWith是一个注解,但是你把它指定为Deprecated注解的实参时没有用@
  • 要把一个数组指定为一个实参,使用arrayOf函数:@RequestMapping(path = arrayOf("/foo", "/bar"))。如果注解类是在 Java 中声明的,命名为value的形参按需自动地被转换成可变长度的形参,所以不用arrayOf函数就可以提供多个实参。

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

  • property-- Java 的注解不能应用这种使用点目标。
  • field -- 为属性生成的字段。
  • get -- 属性的 getter。
  • set -- 属性的 setter。
  • receiver -- 扩展函数或者扩展属性的接收者参数。
  • param -- 构造方法的参数。
  • setparam -- 属性 setter 的参数。
  • delegate -- 为委托属性存储委托实例的字段。
  • file -- 包含在文件中声明的顶层函数和属性的类。

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

  • @JvmName将改变由 Kotlin 生成的 Java 方法或字段的名称。
  • @JvmStatic能被用在对象声明或者伴生对象的方法上,把它们暴露成 Java 的静态方法
  • @JvmOverloads,曾在第3.2.2小节出现过,指导 Kotlin 编译器为带默认参数值的函数生成多个重载(函数)。
  • @JvmField可以应用于一个属性,把这个属性暴露成一个没有访问器的公有 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 中的注解没有显式地指定保留期。

相关文章

  • Kotlin 注解与反射摘要

    声明并应用注解 注解只能拥有如下类型的参数:基本数据类型、字符串、枚举、类引用、其他的注解类,以及前面这些类型的数...

  • Kotlin使用注解

    Kotlin的反射也提供了一些支持注解的API。 一、提取注解信息 Kotlin使用kotlin.Annotion...

  • Kotlin | 10. 注解与反射

    本章内容包括: 应用和定义注解在运行时使用反射对类进行自省一个真正的 Kotlin 项目实例 10.1 声明并应用...

  • Kotlin注解和反射

    简述 本篇文章主要介绍在注解和反射学习中的主要知识 注解的本质 注解实际上就是一种代码标签,它作用的对象是代码。它...

  • kotlin 注解和反射

    反射 在程序的运行过程中动态地调用类的属性和方法:对于任意一个类,都能够知道这个类的所有属性和方法,都能够调用他的...

  • 反射与注解

    反射:框架设计的灵魂 框架:半成品软件。可以在框架的基础上进行软件开发,简化编码反射:将类的各个组成部分封装为其他...

  • 注解与反射

    注解 Annotation, JDK5.0 引入的一种注释机制 注解是元数据的一种形式,提供有关于程序但不属于程序...

  • 注解与反射

    注解(Annotation) 什么是注解 注解又叫 Java 标注,是 JDK5.0 引入的一种注释机制。注解是元...

  • 注解与反射

    注解与反射 自定义注解 @Target 描述的注解可以用在什么地方@Retention 表示被它所注解的注解在...

  • 注解与反射

    注解 声明一个注解类型 元注解 在定义注解时,注解类也能够使用其他的注解声明。对注解类型进行注解的注解类,我们称之...

网友评论

      本文标题:Kotlin 注解与反射摘要

      本文链接:https://www.haomeiwen.com/subject/zlqlfqtx.html