zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    zxing实现二维码生成和解析
    【转】 完美配置Tomcat的HTTPS
    Activiti----hellowWorld(使用H2数据库)
    工具类
    redis的安装与部署
    ajax常用写法
    【iScroll源码学习04】分离IScroll核心
    【iScroll源码学习03】iScroll事件机制与滚动条的实现
    【iScroll源码学习01】准备阶段
    【iScroll源码学习00】模拟iScroll
  • 原文地址:https://www.cnblogs.com/webor2006/p/11586092.html
Copyright © 2011-2022 走看看