我们一般使用类和函数要说明类和函数的确切名称。调用一个类,你需要知道它定义在哪个类中,还有它的名称和参数的类型。

  注解和反射可以给你超越这个规则的能力,让你编写出使用事先未知的任意类的代码。注解赋予这些类库特定的语义,而反射允许你在运行时分析这些类的结构。

应用注解 

// 如@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)注解的更多相关文章

  1. TestNG学习-002-annotaton 注解概述及其执行顺序

    此文主要讲述用 TestNG 基础的 annotation (注解)知识,及其执行的顺序,并通过一个 TestNG 简单的实例演示 annotation 的执行顺序. 希望能对初学 TestNG 测试 ...

  2. Java学习:注解,反射,动态编译

    狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! Java学习:注解,反射,动态编译 Annotation 注解  什么是注解 ? Annotat ...

  3. kotlin 学习感受

    目录 kotlin 学习感受 特点 优点 屎一样的缺点 总结 kotlin 学习感受 直白的说..很不好,像屎一样,本来对此抱有很大的期望和好感度,但经过一整天的学习,完全失望了,这门语言中间有各种的 ...

  4. Kotlin 学习笔记(一)

    (Kotlin 学习笔记的文档结构基本按照 Java 核心技术一书的目录排列) 基本程序设计结构 数据类型 数字 类型 宽度 Double 64 Float 32 Long 64 Int 32 Sho ...

  5. 2.学习SpringMVC注解入门篇

    一.SpringMVC执行流程 . 二.创建项目学习SpringMVC注解 按照我之前的SpringMVC创建项目,首先创建一个项目springmvc01,配置好pom.xml,web.xml,spr ...

  6. Kotlin学习笔记(9)- 数据类

    系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步! Kotlin学习笔记(1)- 环境配置 Kotlin学习笔记(2)- 空安 ...

  7. 深入学习JAVA注解-Annotation(学习过程)

    JAVA注解-Annotation学习 本文目的:项目开发过程中遇到自定义注解,想要弄清楚其原理,但是自己的基础知识不足以支撑自己去探索此问题,所以先记录问题,然后补充基础知识,然后解决其问题.记录此 ...

  8. Java学习之注解篇

    Java学习之注解篇 0x00 前言 续上篇文章,这篇文章就来写一下注解的相关内容. 0x01 注解概述 Java注解(Annotation)又称Java标注,是JDK5.0约会的一种注释机制. 和J ...

  9. Kotlin学习快速入门(7)——扩展的妙用

    原文地址: Kotlin学习快速入门(7)--扩展的妙用 - Stars-One的杂货小窝 之前也模模糊糊地在用这个功能,也是十分方便,可以不用继承,快速给某个类增加新的方法,本篇便是来讲解下Kotl ...

随机推荐

  1. 多线程——Java中继承Thread类与实现Runnable接口的区别

    线程我只写过继承Thread类的,后来知道java多线程有三种方式,今天首先比较一下常用的继承Thread类和实现Runnable接口的区别. 按着Ctrl键进入Thread之后,发现Thread类也 ...

  2. php将base64字符串转换为图片

    昨天用一个js插件 [链接]: http://www.erdangjiade.com/js/910.html 实行了图片裁剪并预览,不过它生产的图片资源是一个base64字符串,不好保存后来在网上找到 ...

  3. webpack--第三方loader

    1.配置处理css样式表的第三方loader webpack默认只能打包处理js类型的文件,无法处理非js类型的文件:要想处理*.css文件,需要手动安装一下合适的第三方loader加载器: npm ...

  4. PHP开发环境 PHP培训教程

        PHP开发环境 兄弟连小编整理如下:   Centos安装apache,mysql,php环境 yum -y install httpd php mysql mysql-server php- ...

  5. PO,BO,VO和POJO的区别

    PO:persistent object 持久对象 1 .有时也被称为Data对象,对应数据库中的entity,可以简单认为一个PO对应数据库中的一条记录. 2 .在hibernate持久化框架中与i ...

  6. Java中使用Scanner类进行键盘的输入详解

    我们在使用Java写代码时,经常会遇到从键盘输入字符串等操作,这时候我们需要用到的是我们的Scanner类来实现获取用户从键盘上的输入操作. Scanner类是一个基于正则表达式的文本扫描器,它可以从 ...

  7. java复制项目中的补丁,完整的包路径

    package com.bytter.audit.iface.util; import java.io.BufferedInputStream; import java.io.BufferedOutp ...

  8. Jprofiler远程监控JVM

    一.下载并安装 本地和远程服务器分别安装Jprofiler,下载地址 二.Windows远程连接JVM配置 1.打开Windows客户端Jprofiler 2.点Cancel 3.创建远程会话 4.添 ...

  9. [BZOJ4010]:[HNOI2015]菜肴制作(拓扑排序)

    题目传送门 题目描述 知名美食家小A被邀请至ATM大酒店,为其品评菜肴. ATM酒店为小A准备了N道菜肴,酒店按照为菜肴预估的质量从高到低给予1到N的顺序编号,预估质量最高的菜肴编号为1.由于菜肴之间 ...

  10. 如何隐藏scroll-Y纵向滚动条,并不影响内容滚动的方法

    网上搜了很多关于隐藏滚动条的文章,发现很多都是只说了如何隐藏scroll-X横向滚动条,对scroll-Y纵向滚动条并没有明确的述说.本文章将介绍3种隐藏滚动条的方法,大家可以结合实际情况,参考文章内 ...