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 ...
随机推荐
- LeetCode - 删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 ...
- kvm:双网卡做bond+桥接
一,KVM基础 kvm是一种技术,云计算是一种模式,虚拟化是利用相应的技术方法在一台物理机器上将其按照不同的需求划分成多个相同或者不同的虚拟操作系统,并且各个虚拟系统可以同时运行,互不干扰,其中任何一 ...
- 谁掳走了 nginx.pid 文件?
1.重载配置 执行 nginx -s reload 命令,报错:找不到 nginx.pid 文件,无法打开.曾经屡试不爽的命令,此时,竟然失灵了? 刚开始,我一头雾水,有点丈二和尚摸不着头脑… ...
- luoguP1197 [JSOI2008]星球大战 x
P1197 [JSOI2008]星球大战 题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中 ...
- Markers
immune pdf(file = paste0(outdir,"T_B_NK_feature.pdf")) VlnPlot(expr_1_4,features = c(" ...
- C# 异步编程,async与await的简单学习
前提声明:C# 5.0 .NET Framework 4.5 2012-08-15 异步和等待(async和await).调用方信息(Caller Information) (C#版本与.NET版本 ...
- MapReduce数据倾斜的解决方式
数据倾斜:由于数据分布不均匀,造成数据大量的集中到一点,造成数据热点.map /reduce程序执行时,reduce节点大部分执行完毕,但是有一个或者几个reduce节点运行很慢,导致整个程序的处理时 ...
- [LeetCode]-010-Regular_Expression_Matching
Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...
- 一款新的好用的SSH工具——FinalShell,比XShell更牛逼~
FinalShell是一体化的的服务器,网络管理软件,不仅是ssh客户端,还是功能强大的开发,运维工具,充分满足开发,运维需求.特色功能:免费海外服务器远程桌面加速,ssh加速,双边tcp加速,内网穿 ...
- centos7 安装 chrome
1. 配置yum源 在目录 /etc/yum.repos.d/ 下新建文件 google-chrome.repo cd /etc/yum.repos.d/ vim google-chrome.repo ...