参考链接

Kotlin官方文档

https://kotlinlang.org/docs/home.html

中文网站

https://www.kotlincn.net/docs/reference/properties.html

本系列为参考Kotlin中文文档

https://download.csdn.net/download/u011109881/21418027

整理的笔记

pdf也可以在这里下载

https://www.kotlincn.net/docs/kotlin-docs.pdf

大部分示例来自bilibili Kotlin语言深入解析 张龙老师的视频

1 注解的定义与使用

笔记

// 注解的定义与使用// 元注解 mata-annotation 用于描述注解
// 常见元注解
// 1 元注解 @Target 表示当前annotation使用在哪个位置
// 可以用在类 方法 值参数 表达式 构造方法上
@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.EXPRESSION,AnnotationTarget.CONSTRUCTOR, AnnotationTarget.PROPERTY_SETTER)
// 2 元注解 @Retention 表示当前注解是运行时注解还是编译时注解等
// 注解在源码时  运行时  二进制(编译时)
@Retention(AnnotationRetention.SOURCE)
// 3 元注解 @Repeatable 表示当前注解是否可以在同一个元素重复使用
// 4 元注解 @MustBeDocumented 表示当前注解是API 文档的一部分
@MustBeDocumented
// annotation的定义
annotation class MyAnnotation@MyAnnotation
class D0507Annotation {@MyAnnotationfun myMethod(@MyAnnotation a: Int/*值参数*/): Int {return (@MyAnnotation 10)/*表达式*/}
}// 给主构造方法添加注解 constructor关键字不可省略
class MyClass2 @MyAnnotation constructor(a: Int) {}class MyClass3 {var a: Int? = null// 给set方法添加注解@MyAnnotation set
}

2 带构造方法的注解

1 注解也可以拥有自己的构造方法

2 注解中带有class作为参数的注解

3 注解使用处目标

笔记

import kotlin.reflect.KClass/*** Created by Cai Huijian on 2021/9/16.*/
// 注解part2
// Java注解与Kotlin注解 100% 兼容/*** 1 注解也可以拥有自己的构造方法* 注解的构造方法的参数类型可以是:* Java里面定义的基本数据类型(Int,Long...)* 字符串类型* classes (MyClass::class)* 枚举* 其他注解* 上述类型的数组类型** Kotlin 注解不允许为空 因为JVM不支持以null的形式存储注解属性* 如果某个注解是另外一个注解的参数 这个注解使用的时候不需要以@开头*/
// 声明一个参数构造方法的注解
@Retention(AnnotationRetention.SOURCE)
@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.EXPRESSION,AnnotationTarget.CONSTRUCTOR, AnnotationTarget.PROPERTY_SETTER)
annotation class MyAnnotation2(val string: String)// 使用该注解
@MyAnnotation2("one parameter annotation")
class MyClass4// 声明2个参数构造方法的注解
annotation class MyAnnotation3(val str: String, val annotation: MyAnnotation2)// 使用该注解
@MyAnnotation3("2 parameter annotation", MyAnnotation2("parameter"))/*** 2 注解中带有class作为参数的注解** 如果某个注解中包含class作为参数 那么需要使用Kotlin class(KClass)* Kotlin编译器会将其自动转换为Java class* 这样 Java代码才能正常看到注解和参数*/
annotation class MyAnnotation4(val arg1: KClass<String>, val arg2: KClass<out Any>, val arg3: KClass<*>)@MyAnnotation4(String::class, Int::class, Float::class)
class MyClass6/*** 3 注解使用处目标 (use-site target)** 指明注解是用在何处* 在对类的属性或是主构造方法的参数声明注解时 会存在多个Java元素可以通过对应的Kotlin元素生成出来,* 因此 在生成的Java字节码中 可能存在多个可能的位置用于生成注解 (即注解存在二义性或多义性 不知道这个注解是加在什么东西上的)* 如想确定注解是加到什么东西上 可以使用注解使用出目标对注解进行进一步修饰*/@Retention(AnnotationRetention.SOURCE)
@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.EXPRESSION,AnnotationTarget.CONSTRUCTOR, AnnotationTarget.PROPERTY_SETTER, AnnotationTarget.FIELD, AnnotationTarget.PROPERTY_GETTER)
annotation class MyCustomerAnnotation// 不加 注解使用处目标 可能不知道该注解用在何处 比如用在属性上 get方法上还是构造方法的形参上 加上注解使用处目标可以清晰知道该注解用在何处
class MyClass7(@field:MyCustomerAnnotation val arg1: String,// 用在Java 属性值上@get:MyCustomerAnnotation val arg2: String,// 用在该属性的get方法@param:MyCustomerAnnotation val arg3: String)// 用在构造方法的参数上fun main() {}class D0507Annotation2 {
}

4 注解使用处目标 @file

// 元注解 @file
// 使用该注解不会生成D0507Annotation3Kt.class 而是生成CustomerName.class
@file:JvmName("CustomerName")package com.example.lib.d05othersclass D0507Annotation3 {
}

Kotlin学习笔记 第四章注解相关推荐

  1. Kotlin学习笔记 第四章 Java调用Kotlin

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...

  2. Kotlin学习笔记 第四章Kotlin调用Java

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...

  3. Kotlin学习笔记 第四章 解构声明 集合集合的扩展方法 Range 异常 Throw关键字

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...

  4. 《Go语言圣经》学习笔记 第四章 复合数据类型

    <Go语言圣经>学习笔记 第四章 复合数据类型 目录 数组 Slice Map 结构体 JSON 文本和HTML模板 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. ...

  5. 计算机网络(第7版)谢希仁著 学习笔记 第四章网络层

    计算机网络(第7版)谢希仁著 学习笔记 第四章网络层 第四章 网络层 4.3划分子网和构造超网 p134 4.3.1划分子网 4.3.2使用子网时分组的转发 4.3.3无分类编址CIDR(构建超网) ...

  6. Effective Java(第三版) 学习笔记 - 第四章 类和接口 Rule20~Rule25

    Effective Java(第三版) 学习笔记 - 第四章 类和接口 Rule20~Rule25 目录 Rule20 接口优于抽象类 Rule21 为后代设计接口 Rule22 接口只用于定义类型 ...

  7. 机器人导论(第四版)学习笔记——第四章

    机器人导论(第四版)学习笔记--第四章 4.1 引言 4.2 解的存在性 4.3 当n<6时操作臂子空间的描述 4.4 代数解法和几何解法 4.5 简化成多项式的代数解法 4.6 三轴相交的Pi ...

  8. Kotlin 学习笔记(四)—— 协程的基础知识,面试官的最爱了~

    又是一个月没见了,坚持永远是世上最难的事情,但,往往难事才会有更大的收获.与君共勉~ 前段时间一直在学习 Compose,所以导致 Kotlin 笔记系列搁置了好久.一方面是因为 Compose 的学 ...

  9. 线性代数学习笔记——第四章学习指南——n维向量空间

    一.学习内容及要求 1. 内容: §4.1. n维向量空间的概念 线性代数学习笔记--第四十讲--n维向量空间的概念 线性代数学习笔记--第四十一讲--n维向量空间的子空间 §4.2. 向量组的线性相 ...

最新文章

  1. zuul默认的路由规则及禁用路由规则
  2. Java黑皮书课后题第4章:4.19(商业:检测ISBN-10)改写编程练习题3.9,将ISBN号作为一个字符串输入
  3. Lync在Internet上无法登录问题之一
  4. 停课不停学,优酷直播如何将网课点名延迟降到0.6s?
  5. linux创建zip+函数,linux+shell基础知识
  6. P3891-[GDOI2014]采集资源【背包,dp】
  7. 生产消费是什么设计模式_快速消费品的完整形式是什么?
  8. 进程间内存共享问题[转]
  9. python的property用法_在python中property怎样使用-百度经验
  10. WCF热带鱼书学习手记 - ABC
  11. Android Binder机制:编写自己的本地服务
  12. code forces 1176 D. Recover it!
  13. JAVEWEB 过滤器Filter的实现
  14. 弱网优化、网络抖动、网络延时,这些问题,怎么处理?
  15. 玩转“数独”2.0时代
  16. 神经网络有趣案例_特斯拉高管揭秘自动驾驶技术:48种神经网络上阵,最多可检测1000种物体...
  17. 微信小程序weui在线入门教程-WeUi操作反馈-actionsheet弹出式菜单
  18. zencart1.55stripe信用卡内嵌支付获取卡号
  19. 全球与中国老年人代步车市场深度研究分析报告
  20. C++ Test 关于Read Symbols报错的解决方法(适用于Windows 10)

热门文章

  1. python3.5.2安装pygame_#Python3.6.2(32位) pip安装 和 pygame 环境配置
  2. 第38章:MongoDB-集群--Replica Sets(副本集)---多机的搭建
  3. Jmeter-JDBC Request
  4. [转]Postgres-XL 10r1英文文档
  5. vue开发 - 将方法绑定到window对象,给app端调用
  6. memcache 获取key的方法,查询session存储
  7. Java面向对象——基础1 类及类的成员
  8. 字符串——垂直柱状图(洛谷 P1598)
  9. 数组——寄包柜(洛谷 P3613)
  10. java面试 设计模式_Java面试中常问到的设计模式