Kotlin注解深入解析与实例剖析
在上一次https://www.cnblogs.com/webor2006/p/11522798.html中学习了Kotlin注解相关的东东,这次继续对Kotlin的注解继续学习:
注解也可以拥有自己的构造方法,并且构造方法也可以接收参数,注解构造方法所允许的参数类型:
1、与Java原生类型所对应的类型(Int, Long..)
2、字符串:string
3、classes (MyClass::class)
4、枚举:enums
5、其他的注解
6、上述类型的数组类型
下面看下代码:
接着再来定义一个,可以将一个注解做为另一个注解的构造参数:
Kotlin的注解参数是不允许为可空类型的,因为JVM不支持以null的形式存储注解属性值的。如果某个注解被用作其他注解的参数,那么其名字就不需要以@字符开头。
如果需要将某个class作为注解的参数,那么请使用Kotlin class(KClass),因为Kotlin编译器会自动将其转换为Java Class,这样Java代码就可以正常看到注解与参数了,下面瞅一下KClass:
下面来写个例子:
注解使用处目标(use-site target):
在对类的属性或是主构造方法的参数声明注解时,会存在多个Java元素都可以通过对应的Kotlin元素生成出来,因此,在所生成的Java字节码中,就会存在多个可能的位置来生成相应的注解,若想精确指定如何来生成注解,那么可以使用注解的使用处目标方式来实现。
上面说得有点抽象,用代码来具化一下:
其实对于当前的文件,也可以指定注解,如:
我们知道编写的一个Kotlin文件在编译成class文件会按文件名+kt.class规则来生成,如:
编译一下:
此时我们就可以通过文件的注解改掉这个规则,如下:
其中可以看一下JvmName其实就是一个注解:
这样就可以动态的去改成我们想要规则的class名称。
以上就是关于Kotlin的注解相关的东东,注意:它跟Java的注解是百分之百兼容滴~
Kotlin注解深入解析与实例剖析的更多相关文章
- Kotlin协程解析系列(上):协程调度与挂起
vivo 互联网客户端团队- Ruan Wen 本文是Kotlin协程解析系列文章的开篇,主要介绍Kotlin协程的创建.协程调度与协程挂起相关的内容 一.协程引入 Kotlin 中引入 Corout ...
- java中注解的使用与实例 (二)
java 注解,从名字上看是注释,解释.但功能却不仅仅是注释那么简单.注解(Annotation) 为我们在代码中添加信息提供了一种形式化的方法,是我们可以在稍后 某个时刻方便地使用这些数据(通过 解 ...
- 【转】java中注解的使用与实例
原文:http://www.cnblogs.com/pepcod/archive/2013/02/20/2918719.html java 注解,从名字上看是注释,解释.但功能却不仅仅是注释那么简单. ...
- Java注解全面解析(转)
1.基本语法 注解定义看起来很像接口的定义.事实上,与其他任何接口一样,注解也将会编译成class文件. @Target(ElementType.Method) @Retention(Retentio ...
- Android实例剖析笔记(四)
摘要:分析NoteEditor这个类和以及Content Provider机制 NoteEditor深入分析 首先来弄清楚“日志编辑“的状态转换,通过上篇文章的方法来做下面这样一个实验,首先进入“日志 ...
- @Aspect 注解切面解析
注解切面解析 注解切面解析器 /** * 注解切面解析器 */ public class BeanFactoryAspectJAdvisorsBuilder { /** * Bean 工厂 */ pr ...
- RequestMapping 注解的解析、匹配、注册
RequestMapping 注解的解析.匹配.注册 1)创建 RequestMappingHandlerMapping 实例时会触发 afterPropertiesSet 调用. 2)读取容器中所有 ...
- DNS原理及其解析过程 精彩剖析
本文章转自下面:http://369369.blog.51cto.com/319630/812889 DNS原理及其解析过程 精彩剖析 网络通讯大部分是基于TCP/IP的,而TCP/IP是基于IP地址 ...
- Seq_file文件系统实例剖析
http://blog.chinaunix.net/uid-24432676-id-2607766.html 另 http://www.cnblogs.com/qq78292959/archive/2 ...
随机推荐
- Xamarin Assets文件读取
在Assets文件夹中添加nlog.config文件,在属性中将Build Action设置为AndroidAsset var steam = Assets.Open("nlog.confi ...
- java学习摘抄笔记mybaits2
mybatis第二天 高级映射 查询缓存 和spring整合 课程复习: mybatis是什么? mybatis是一人持久层框架,mybatis是一个不完全的ORM框架.sql语句需要程序员自己去编 ...
- (转)Intellij IDEA 2017 debug断点调试技巧与总结详解篇
背景:详细介绍idea的debug调试过程 Intellij IDEA 2017 debug断点调试技巧与总结详解篇
- JS核心系列:原型对象
在JS中,每当创建一个函数对象f1 时,该对象中都会内置一些属性,其中包括prototype和proto, prototype即原型对象. 每一个构造函数都有一个与之相关联的对象,该对象称之为原型对象 ...
- unity 在editor编辑器下创建多个按钮
入坑最后发现就几句话,真是气死人了.发现自己掉坑里,脑子就变笨了,把代码贴给你们,保持大脑清醒. using System.Collections; using System.Collections. ...
- JS系列:函数function
### 函数 function > 在js中函数就是一个方法(一个功能体)基于这个函数,一般是为了实现某个功能. ``` var total =10; total+=10; total=tota ...
- kibana内存设置
kibana是一个基于NodeJS的单页web应用.而NodeJS则是基于Chrome V8引擎的.V8引擎对于内存的使用是有限制的,默认情况下,64位系统下约为1.4GB,32位系统下约为0.7GB ...
- 全栈项目|小书架|服务器端-NodeJS+Koa2 实现书籍详情接口
通过上篇文章 全栈项目|小书架|微信小程序-首页水平轮播实现 我们实现了前端(小程序)效果图的展示,这篇文章来介绍服务器端的实现. 书籍详情分析 书籍详情页面如下: 从上图可以分析出详情页面大概有以下 ...
- EgretWing链接微信开发工具调试问题
EgretWing链接微信开发工具调试问题 EgretWing 编译器支持持三种调试模式,Node.js .Chrome .EgretWing 扩展开发. 开发过程中会遇到工具配置错误. 这就需要在E ...
- Exception和RuntimeException区别
Exception:强制性要求用户必须进行处理: RuntimeException:是Exception的子类,由用户选择是否进行处理: