美文网首页工作生活
Kotlin反射(2)引用类

Kotlin反射(2)引用类

作者: 狼性代码人 | 来源:发表于2019-07-06 06:45 被阅读0次

  对类的引用是通过 KClass 实现的,KClass 是实现反射的关键所在,KClass 的一个实例表示对类的引用。在程序代码中引用类使用 :: 运算符,引用类的示例代码如下:

fun main(args: Array<String>) {
    // 方法一:"类名::class"
    val clz1 = Int::class
    val clz2 = Person::class
    // 方法二:"对象::class"
    val person = Person("小三")
    val clz3 = person::class
}

  从上述代码可见,引用类有两种形式:类名::class对象::class。clz1、clz2 和 clz3 都是 KClass 类型,表示一个类的引用,其中 clz1 是 KClass<Int> 类型,clz2、clz3 是 KClass<Person> 类型。

  KClass 类提供了很多函数可以获得运行时对象的相关信息,下面的程序代码展示了其中一些函数。

data class Person(val name: String)

fun main(args: Array<String>) {
    // 方法一:"类名::class"
    val clz1 = Int::class
    val clz2 = Person::class
    // 方法二:"对象::class"
    val person = Person("小三")
    val clz3 = person::class

    println("clz1 类名:${clz1.simpleName}")
    println("clz1 类全名:${clz1.qualifiedName}")

    println("clz2 是否为抽象类或接口:${clz2.isAbstract}")
    println("clz2 是否为数据类:${clz2.isData}")
    var sBuilder = StringBuilder()
    clz2.members.joinTo(sBuilder, ", ", "[", "]")
    println("clz2 所有成员:${sBuilder.toString()}")

    sBuilder = StringBuilder()
    clz2.members.filter { it is KProperty }.joinTo(sBuilder, ", ", "[", "]")
    println("clz2 所有属性:${sBuilder.toString()}")
}

运行结果

clz1 类名:Int
clz1 类全名:kotlin.Int
clz2 是否为抽象类或接口:false
clz2 是否为数据类:true
clz2 所有成员:[val cn.ak.kotmodule.kot.Person.name: kotlin.String, fun cn.ak.kotmodule.kot.Person.component1(): kotlin.String, fun cn.ak.kotmodule.kot.Person.copy(kotlin.String): cn.ak.kotmodule.kot.Person, fun cn.ak.kotmodule.kot.Person.equals(kotlin.Any?): kotlin.Boolean, fun cn.ak.kotmodule.kot.Person.hashCode(): kotlin.Int, fun cn.ak.kotmodule.kot.Person.toString(): kotlin.String]
clz2 所有属性:[val cn.ak.kotmodule.kot.Person.name: kotlin.String]

注意:Kotlin 反射 API 所需要的运行时组件来自于独立的 kotlin-reflect.jar 文件,在 Android 等移动平台上为了减少应用程序包的大小,应用程序包再默认情况下不包含 kotlin-reflect.jar 文件。如果要在应用中使用反射功能,则需要额外添加 kotlin-reflect.jar 文件至应用程序包中,并添加 kotlin-reflect.jar 到项目的类路径。

  • 下面是导入 kotlin-reflect.jar 的方法:
    build.gradle文件添加红线代码

相关文章

  • Kotlin反射(2)引用类

      对类的引用是通过 KClass 实现的,KClass 是实现反射的关键所在,KClass 的一个实例表示对类的...

  • Kotlin反射

    Kotlin把函数和属性当成“一等公民”,并可通过反射直接获取函数、属性的引用。 一、类引用 Kotlin的类引用...

  • 从Java到Kotlin(七)

    反射和注解 目录 1.反射1.1类引用1.2函数引用1.3属性引用 2.注解2.1声明注解2.2构造函数 1.反射...

  • Kotlin 反射

    反射是语言与库中的一组功能, 可以在运行时刻获取程序本身的信息。 类引用 要得到一个静态的已知的 Kotlin 类...

  • kotlinx.serialization

    kotlin 的官方序列化库,通过自动生成代码来避免反射。只需要在 kotlin 类上标记 @serializab...

  • 入门示例

    在包 com.cjt.kotlin2定义了方法 multiply(. ..), 在另一类中引用该方法, 如下示例

  • 26.Kotlin与Java互操作

    Kotlin与Java互操作 在Kotlin中操作Java 示例代码:Person类 在Java中,所有引用都可能...

  • About Kotlin-Kotlin中的类2

    About Kotlin(2) 继续昨天的部分。介绍Kotlin中的类。 Kotlin中的类 抽象类和接口 抽象类...

  • Kotlin学习笔记(六)-反射

    [toc] 前言 这一节为Kotlin反射,主要是在Kotlin中时用Java-Api来实现反射,使用Kotlin...

  • Kotlin - 空安全

    1.Kotlin空安全介绍 Kotlin空安全可消除来自代码空引用的危险。 2.什么是空引用? 许多编程语言(包括...

网友评论

    本文标题:Kotlin反射(2)引用类

    本文链接:https://www.haomeiwen.com/subject/gkechctx.html