继续学习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反射重要组件与流程详解的更多相关文章

  1. iOS 组件化流程详解(git创建流程)

    [链接]组件化流程详解(一)https://www.jianshu.com/p/2deca619ff7e

  2. C++的性能C#的产能?! - .Net Native 系列《二》:.NET Native开发流程详解

    之前一文<c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATIVE初窥> 获得很多朋友支持和鼓励,也更让我坚定做这项技术的推广者,希望能让更多的朋友了解这项技术,于是先从官方 ...

  3. [nRF51822] 5、 霸屏了——详解nRF51 SDK中的GPIOTE(从GPIO电平变化到产生中断事件的流程详解)

    :由于在大多数情况下GPIO的状态变化都会触发应用程序执行一些动作.为了方便nRF51官方把该流程封装成了GPIOTE,全称:The GPIO Tasks and Events (GPIOTE) . ...

  4. 迅为4412开发板Linux驱动教程——总线_设备_驱动注册流程详解

    本文转自:http://www.topeetboard.com 视频下载地址: 驱动注册:http://pan.baidu.com/s/1i34HcDB 设备注册:http://pan.baidu.c ...

  5. vc中调用Com组件的方法详解

    vc中调用Com组件的方法详解 转载自:网络,来源未知,如有知晓者请告知我.需求:1.创建myCom.dll,该COM只有一个组件,两个接口:   IGetRes--方法Hello(),   IGet ...

  6. Java 反射 设计模式 动态代理机制详解 [ 转载 ]

    Java 反射 设计模式 动态代理机制详解 [ 转载 ] @author 亦山 原文链接:http://blog.csdn.net/luanlouis/article/details/24589193 ...

  7. Linux启动流程详解【转载】

    在BIOS阶段,计算机的行为基本上被写死了,可以做的事情并不多:一般就是通电.BIOS.主引导记录.操作系统这四步.所以我们一般认为加载内核是linux启动流程的第一步. 第一步.加载内核 操作系统接 ...

  8. Go语言备忘录:反射的原理与使用详解

    目录: 预备知识 reflect.Typeof.reflect.ValueOf Value.Type 动态调用 通过反射可以修改原对象 实现类似“泛型”的功能   1.预备知识: Go的变量都是静态类 ...

  9. Scala进阶之路-反射(reflect)技术详解

    Scala进阶之路-反射(reflect)技术详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Scala中的反射技术和Java反射用法类似,我这里就不一一介绍反射是啥了,如果对 ...

随机推荐

  1. SQL中merge into用法

    从备份表中更新字段到正式表中,使用 UPDATE 批量更新大量的数据,会出现效率低下,有时候甚至卡死的情况,后面通过使用 MERGE INTO 代替 UPDATE 执行批量更新,会提升执行效率. ME ...

  2. 【NPDP笔记】第三章 新产品流程

      3.1 产品开发,风险与汇报的过程,开发实践和流程提升成功率 管控新产品失败的风险,随着成本增加,风险降低 知识能改改进决策,降低风险,决策框架 识别问题与机会 收集信息 组织记录,组织员工 外部 ...

  3. 2019年新加坡之行 Day 1

    又到了公司每年一次的年度旅游,继前几年的香港.日本.韩国游后,今年公司选择了新加坡.由于之前曾在新加坡公司The Adventus Consultants工作过2年时间,所以对于这次重返新加坡,我还是 ...

  4. python 必选参数、默认参数、可变参数和、关键字参数

    转自:https://www.liaoxuefeng.com/wiki/897692888725344/897693568201440 可变参数 在Python函数中,还可以定义可变参数.顾名思义,可 ...

  5. 如何理解JavaScript的原型和原型链

    在现在的业务开发中,应该很少人在写原生JavaScript了,大家都一股脑地扑在各个框架上.本来,这些框架对于业务和开发者来说是一种福音,减少了各种各样的开发痛点,但是带来的负面问题就是对于开发者来说 ...

  6. mybatis一级二级缓存

    一级缓存分析 不需要任何配置 ,mybatis本身带有 一级缓存是SqlSession范围的缓存,当调用SqlSession的修改,添加,删除,commit(),close()等方法时,就会清空一级缓 ...

  7. ActiveMQ 安装方法

    1. 打开浏览器,访问网址 http://activemq.apache.org/components/classic/download/ ,下载最新的版本,当前最新版本为5.15.9,根据Activ ...

  8. PHP设计模式 - 命令模式

    命令模式:在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”.但在某些场合,比如要对行为进行“记录.撤销/重做.事务”等处理,这种无法抵御变化的紧耦合是不合适的.在这种情况下,如何将“ ...

  9. 通过重新上传修改后的docker镜像来在kubeapps上实现k8s上部署的nginx版本更新,回退等

    docker操作:制作自定义镜像 # docker下载官方nginx镜像 docker pull nginx # 基于该镜像运行一个容器 docker run -it -d --name nginx_ ...

  10. linux 文件夹分享

    1.在 linux 安装 samba,安装好之后 配置文件在 /etc/samba/smb.conf 目录下. yum install samba samba-client(yum install s ...