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
最新文章
- 获取sql server数据库表结构
- 关于C语言的问卷调查(补交)
- RESTful Web Services初探
- 2016CCPC 合肥--最大公约数//每一年通向它的路上,多少人折戟沉沙,多少人功败垂成,有人一战成名,有人从头再来。
- [poj3349]Snowflake Snow Snowflakes(hash)
- windows server 2008 asp连接数据库sql2000失败
- Properties文件及与之相关的System.getProperties操作(转)
- 点(.)运算符和箭头(->;)运算符的区别
- SQL Server 实现Split函数
- 不同Activity之间传递线程
- ScheduledThreadPoolExecutor详解
- 麒麟子Cocos Creator实用技巧一:如何正确地显示微信头像
- radio,check美化
- [转]利用Jenkins的Pipeline实现集群自动化部署SpringBoot项目
- IDEA引入spring的命名空间
- 深入Vue2.x的虚拟DOM diff原理
- groovy安装 ideal
- 【leetcode70】【动态规划】 爬楼梯
- spring配置遇到的问题
- Python黑客——快速编写信息收集器
热门文章
- Kubernetes之在k8s中部署Java应用
- [LOJ3053]希望
- Linux内核参数详解
- JavaEE 期末总结
- java-工厂
- ubuntu supervisor管理uwsgi+nginx
- .net Dapper 实践系列(3) ---数据显示(Layui+Ajax+Dapper+MySQL)
- c# sharepoint client object model 客户端如何创建中英文站点
- C# vb .net实现装饰边框效果滤镜
- Parameter 0 of method sqlSessionTemplate in org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration required a single bean, but 2 were found: