kotlin学习(9)注解
我们一般使用类和函数要说明类和函数的确切名称。调用一个类,你需要知道它定义在哪个类中,还有它的名称和参数的类型。
注解和反射可以给你超越这个规则的能力,让你编写出使用事先未知的任意类的代码。注解赋予这些类库特定的语义,而反射允许你在运行时分析这些类的结构。
应用注解
// 如@Test标记一个函数
class MyTest{
@Test
fun test(){
//TODO
}
}
注解只能拥有如下类型的参数:基本数据类型、字符串、枚举、类引用、其他的注解类。
//类作为注解实参,要在类名后加 ::class
@MyAnnotation(MyClass::class) //另一个注解作为注解实参,去掉@ 这里的ReplaceWith是一个注解
@Deprecated("Use removeAt(index) instead.",ReplaceWith("removeAt(index)"))
注解实参需要在编译期就是已知的,要把属性当做注解实参使用,需要用const修饰符标记它,来告知编译器这个属性是编译常量。
const val TEST_TIMEOUT = 100L
@Test(timeout = TEST_TIMEOUT) fun testMethod(){ }
用const标注的属性可以声明在一个文件的顶层或者一个object中,而且必须初始化为基本数据类型或者String类型的值。如果尝试使用普通类的属性作为注解实参,会报错。
注解目标
Kotlin源代码中的单个声明可能会对应成多个声明,比如Kotlin的属性就对应一个Java字段、一个getter、一个潜在的setter和它的参数。而且他们每一个都能携带注解。所以说明这些元素中哪些需要注解十分必要。
//这里Rule是注解名,get是点目标,代表应用到getter上,用冒号隔开它们
@get:Rule
使用注解定制JSON序列化
注解的一个经典用法之一就是定制化对象的序列化。
序列化就是一个过程,把对象转换成可以存储或者在网络上传输的二进制或者文本的表示法。
反序列化就是把这种表示法转换成一个对象。
最常见的一种序列化的格式就是JOSN
//序列化一个Person类
data class Person(val name:String, val age:Int) //把实例传给serialize函数,就会返回一个包含该实例json表示法的字符串
>>>val person = Person("Alice", 20)
>>>println(serialize(person))
{"age": 20, name: "Alice"} //反序列化取出一个对象
>>>val json=""" {"age": 20, name: "Alice"} """
>>>println(deserialize<Person>(json))
Person(name=Alice, age=29)
声明注解
annotation class JsonName(val name:String) 在class前加annotation,并且没有类主体i,不需要大括号。
元注解
注解类也可以被注解。应用在注解类上的注解被称为元注解。
链接:Java中的四个元注解
kotlin学习(9)注解的更多相关文章
- TestNG学习-002-annotaton 注解概述及其执行顺序
此文主要讲述用 TestNG 基础的 annotation (注解)知识,及其执行的顺序,并通过一个 TestNG 简单的实例演示 annotation 的执行顺序. 希望能对初学 TestNG 测试 ...
- Java学习:注解,反射,动态编译
狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! Java学习:注解,反射,动态编译 Annotation 注解 什么是注解 ? Annotat ...
- kotlin 学习感受
目录 kotlin 学习感受 特点 优点 屎一样的缺点 总结 kotlin 学习感受 直白的说..很不好,像屎一样,本来对此抱有很大的期望和好感度,但经过一整天的学习,完全失望了,这门语言中间有各种的 ...
- Kotlin 学习笔记(一)
(Kotlin 学习笔记的文档结构基本按照 Java 核心技术一书的目录排列) 基本程序设计结构 数据类型 数字 类型 宽度 Double 64 Float 32 Long 64 Int 32 Sho ...
- 2.学习SpringMVC注解入门篇
一.SpringMVC执行流程 . 二.创建项目学习SpringMVC注解 按照我之前的SpringMVC创建项目,首先创建一个项目springmvc01,配置好pom.xml,web.xml,spr ...
- Kotlin学习笔记(9)- 数据类
系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步! Kotlin学习笔记(1)- 环境配置 Kotlin学习笔记(2)- 空安 ...
- 深入学习JAVA注解-Annotation(学习过程)
JAVA注解-Annotation学习 本文目的:项目开发过程中遇到自定义注解,想要弄清楚其原理,但是自己的基础知识不足以支撑自己去探索此问题,所以先记录问题,然后补充基础知识,然后解决其问题.记录此 ...
- Java学习之注解篇
Java学习之注解篇 0x00 前言 续上篇文章,这篇文章就来写一下注解的相关内容. 0x01 注解概述 Java注解(Annotation)又称Java标注,是JDK5.0约会的一种注释机制. 和J ...
- Kotlin学习快速入门(7)——扩展的妙用
原文地址: Kotlin学习快速入门(7)--扩展的妙用 - Stars-One的杂货小窝 之前也模模糊糊地在用这个功能,也是十分方便,可以不用继承,快速给某个类增加新的方法,本篇便是来讲解下Kotl ...
随机推荐
- AOP 相关包
aop 命名空间,jar 扫路径
- 使用WireMock伪造REST服务
在真正的rest api服务还没有写好之前,为了方便前端测试调用,后端可以写个服务,伪造rest服务(写假数据) 1.官网: http://wiremock.org/ 下载可执行jar:http:// ...
- HDU1847--Good Luck in CET-4 Everybody!(SG函数)
Problem Description 大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和Cici都是如此.当然,作为在考场浸润了十几载 ...
- Oracle使用正则表达式拆分字段里多行分布式值
不规范的表设计往往会带来程序设计上的麻烦,也会降低SQL的性能. 例如下表显示的内容: 这样我们调取多值字段用来做匹配的话就比较麻烦,我们可以通过正则表达式REGEXP_SUBSTR先将 多值得列分成 ...
- spring boot 和 mybatis集成
1.pom.xml 添加mybatis和mysql依赖 <!-- 添加 MyBatis --> <dependency> <groupId>org.mybatis. ...
- 你的第一个Quartz程序
package org.quartz.examples.example1; import java.util.Date; import org.slf4j.Logger; import org.slf ...
- 未解决:found 1 high severity vulnerability run `npm audit fix` to fix them, or `npm audit` for details
问题出现: 在通过 `ng new hello-world` 命令新建项目时,项目出现以下警告: found high severity vulnerability run `npm audit fi ...
- 网易云课堂_C++程序设计入门(下)_第7单元:出入虽同趣,所向各有宜 – 文件输入和输出_第7单元 - 作业2:编程互评
第7单元 - 作业2:编程互评 查看帮助 返回 提交作业(剩余10天) 完成并提交作业 作业批改 互评训练 互评作业 自评作业 成绩公布 查看成绩 由于在线编程不支持 ...
- itchat初步解读登录(转)
原文:https://blog.csdn.net/coder_pig/article/details/81357810 itchat的登录采取的是通过itchat.auto_login()这个函数来完 ...
- Java ——运算符
本节重点思维导图 递增递减 前缀自增自减法(++a,--a): 先进行自增.减运算,再进行表达式运算 后缀自增自减法(a++,a--): 先进行表达式运算,再进行自增.减运算 例[1]: int a ...