Kotlin反射重要组件与流程详解
继续学习Kotlin反射,我们知道对于Java的反射类是Class,而在Kotlin中的反射类是KClass,而在Java当中对于反射中的方法是用Method,而在Kotlin中是用KFunction来表示的,如下:
而在Java中反射属性相关的会有一个Field来表示,而在Kotlin中也有一个与之对应的,叫:
而它有多种形式:
好,了解了反射相关的对应关系,下面用代码实例来对Kotlin的反射进行进一步的巩固,在进行撸码之前先来再看一下KClass类的说明:
而这里跟Java有一些区别的就是在Java中获取其Class对象要么是通过类.class的方式,要么是通过对象的getClass()方法来获取,而在Kotlin中不管是类还是对象其获取KClass的对象都是用"::class"方式来获取,好了解了之后下面再用代码来进行说明:
那这个kclass具体类型是啥呢?下面将其写全:
应该是这个协变类型。。为啥呢?其实很好理解,类似于Java的Class<? extend String>,所以下面得在类型声明中增加一个协变:
接下来咱们直接来获取String类型的Class对象,如下:
我们知道在Java中不论一个类有多少实例,其对应的Class只有一份,那在Kotlin中是不是也是一样只对应一个KClass呢,下面论证一下:
嗯,确实是的。下面再来看一下对于Java类中来获取它的KClass对象:
呃,难道Date的Java class对象跟Kotlin的Kclass对象是同一个?其实不是的,下面论证一下:
其中看一下它的细节:
反射实践:
获取泛型参数:
好,接下来则以实际反射的使用来获取像泛型参数、属性、方法参数等,下面看下示例:
获取父类接口:
接下来通过反射来获取父类的一些信息:
好,那我们再定义一个自己的接口,然后让它实现,再看结果:
获取成员属性:
获取方法:
其结果:
[fun com.kotlin.test13.MyTestClass3.printNothing(): kotlin.Unit, fun com.kotlin.test13.MyTestClass3.printSomething(): kotlin.Unit, fun com.kotlin.test13.MyTestClass3.equals(kotlin.Any?): kotlin.Boolean, fun com.kotlin.test13.MyTestClass3.hashCode(): kotlin.Int, fun com.kotlin.test13.MyTestClass3.toString(): kotlin.String] Process finished with exit code 0
Kotlin反射重要组件与流程详解的更多相关文章
- iOS 组件化流程详解(git创建流程)
[链接]组件化流程详解(一)https://www.jianshu.com/p/2deca619ff7e
- C++的性能C#的产能?! - .Net Native 系列《二》:.NET Native开发流程详解
之前一文<c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATIVE初窥> 获得很多朋友支持和鼓励,也更让我坚定做这项技术的推广者,希望能让更多的朋友了解这项技术,于是先从官方 ...
- [nRF51822] 5、 霸屏了——详解nRF51 SDK中的GPIOTE(从GPIO电平变化到产生中断事件的流程详解)
:由于在大多数情况下GPIO的状态变化都会触发应用程序执行一些动作.为了方便nRF51官方把该流程封装成了GPIOTE,全称:The GPIO Tasks and Events (GPIOTE) . ...
- 迅为4412开发板Linux驱动教程——总线_设备_驱动注册流程详解
本文转自:http://www.topeetboard.com 视频下载地址: 驱动注册:http://pan.baidu.com/s/1i34HcDB 设备注册:http://pan.baidu.c ...
- vc中调用Com组件的方法详解
vc中调用Com组件的方法详解 转载自:网络,来源未知,如有知晓者请告知我.需求:1.创建myCom.dll,该COM只有一个组件,两个接口: IGetRes--方法Hello(), IGet ...
- Java 反射 设计模式 动态代理机制详解 [ 转载 ]
Java 反射 设计模式 动态代理机制详解 [ 转载 ] @author 亦山 原文链接:http://blog.csdn.net/luanlouis/article/details/24589193 ...
- Linux启动流程详解【转载】
在BIOS阶段,计算机的行为基本上被写死了,可以做的事情并不多:一般就是通电.BIOS.主引导记录.操作系统这四步.所以我们一般认为加载内核是linux启动流程的第一步. 第一步.加载内核 操作系统接 ...
- Go语言备忘录:反射的原理与使用详解
目录: 预备知识 reflect.Typeof.reflect.ValueOf Value.Type 动态调用 通过反射可以修改原对象 实现类似“泛型”的功能 1.预备知识: Go的变量都是静态类 ...
- Scala进阶之路-反射(reflect)技术详解
Scala进阶之路-反射(reflect)技术详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Scala中的反射技术和Java反射用法类似,我这里就不一一介绍反射是啥了,如果对 ...
随机推荐
- PowerShell学习笔记
1,ps7官方文档 2,使用脚本生成帮助文档 function Add-Node { param ( $selectedNode, $name, $tag ) $newNode = new-objec ...
- HTML系列:css3选项卡
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- latex 写大论文图目录中图注过长解决方案
写论文(尤其是学位论文)的时候,Figure通常都是有很长的注释,而Latex的list of figures似乎不能换行(看到有换行的,不过感觉不够美观). 再说,list of figures里面 ...
- 基于SpringSecurity实现RBAC权限控制(待完善)
Spring Security是一个为企业应用系统提供声明式的安全访问控制功能,减少为了企业应用系统安全控制而编写的大量重复代码. 认证: spring security的原理就是使用很多的拦截器对U ...
- Java多线程编程(1)--Java中的线程
一.程序.进程和线程 程序是一组指令的有序集合,也可以将其通俗地理解为若干行代码.它本身没有任何运行的含义,它只是一个静态的实体,它可能只是一个单纯的文本文件,也有可能是经过编译之后生成的可执行文 ...
- 客开监控(BE/UI/BP)插件停用与启用
1.单据界面右键属性,获取当前客开监控页面URL连接:http://172.16.168.15/U9/erp/display.aspx?lnk=UFSoft.UBF.Cust.CustManager& ...
- 【EBS】XLA_GLT表的清理
一.Xla_glt*在出现在日记账导入中的阶段 与R11使用gl_interface表不同,R12中大部分情况下使用的是XLA_GLT_<groupId>表:子帐传送到总账的过程中,会动态 ...
- ubuntu supervisor管理uwsgi+nginx
一.概述 superviosr是一个Linux/Unix系统上的进程监控工具,他/她upervisor是一个Python开发的通用的进程管理程序,可以管理和监控Linux上面的进程,能将一个普通的命令 ...
- yii框架中的各种小问题
1.默认路径的修改 2.分页的做法
- 所有子模块都要执行的checkstyle检查
<!-- 所有子模块都要执行的checkstyle检查 --> <plugin> <groupId>org.apache.maven.plugins</gro ...