继续学习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. Any Video Converter Pro for Mac注册码

    Any Video Converter Pro for Mac注册码:name:www.macmofo.comsn:000016-D84U8Q-8BN16B-WP2BV6-9RA73A-X7D4V3- ...

  2. c# .net 4.5.2 asp.net mvc 使用hangfire

    一定要有hangfire数据库,否则hangfire会报错. (obStorage.Current property value has not been initialized. You must ...

  3. 构建一个java环境的centos系统镜像并上传到阿里云镜像仓库

    编辑dockerfile 文件 FROM centos MAINTAINER zhaoweifeng ENV LANG en_US.UTF-8 RUN /bin/cp /usr/share/zonei ...

  4. 将你的数据导入到json格式

    不知道为什么大家那么偏爱json格式,清晰?跨平台?或许这都是它的优点吧,之前我都是将我的数据放到txt中,今后就用json吧.初步写了一个写入json的模板,就这么用吧. def get_qq_05 ...

  5. [转]python file文件操作--内置对象open

    python file文件操作--内置对象open   说明: 1. 函数功能打开一个文件,返回一个文件读写对象,然后可以对文件进行相应读写操作. 2. file参数表示的需要打开文件的相对路径(当前 ...

  6. redis 简单教程

    一.redis的安装 安装环境:centos 7 1) 下载redis 这里我们下载的是redis-4.0.10.tar.gz 2)将redis tar包移动至 /usr/local 执行如下命令 c ...

  7. Git 初始仓库

    配置好环境后,通常有两种方式使用git,一种从git仓库上克隆,进行操作,一种是在本地创建并初始仓库,进行操作.工作中前者比较多见. 下面演示如何在本地创建仓库. 1.新建一个目录 # mkdir t ...

  8. DDD/CQRS模式,微服务,容器

    DDD/CQRS模式,微服务,容器 https://docs.microsoft.com/zh-cn/previous-versions/msp-n-p/ee658109(v=pandp.10) We ...

  9. WEUI Search Input回车键无法跳转解决

    现象:回车键依然当前页面, window.location.href 设置无法起作用 增加 window.event.returnValue = false; 解决问题

  10. Linux目录结构(目录结构详解是重点)

    1.Linux目录与Windows目录对比 1.Windows目录结构 2.Linux目录结构 深刻理解Linux 树状文件目录是非常重要的,只有记住他们,你才能在命令行中任意切换,想去哪里去哪里 2 ...