Kotlin笔记 十二(二) 反射

本文详细介绍了Kotlin中的反射机制,包括类引用、反射创建实例、构造器引用、调用方法、函数引用、访问属性值、属性引用以及绑定的方法与属性引用。通过KClass对象可以进行各种反射操作,如创建实例、调用方法、获取属性等,并且讲解了如何在Kotlin反射与Java反射之间转换。
摘要由CSDN通过智能技术生成

反射

Kotlin中属性和函数与对象一样都是一等公民,可以直接通过反射获取其引用;

1.1、类引用

Kotlin中的类引用用KClass表示,引用的是KClass对象,Java的类引用是java.lang.Class对象,二者不一样;

对于已知的Kotlin类,通过以下获取其类引用:

		var c=MyClass(类名)::classs

如果已有Kotlin对象,也可使用对象获取类引用:

		var c=clz::class

如果要通过KClass获取对应的Java类引用:调用KClass对象的java属性

		c.java;

1.2、反射创建实例

方式一:

  1. 获取到KClass对象后,可以调用其createInstance()方法创建该类的实例,该方法***总是调用该列无参构造器创建的实例***,因此使用该方法的前提就是必须提供无参构造器;

方式二:
通过获取到的KClass对象的,借助其constructors获取到所有构造器,再利用条件判断返回目标构造器,最后通过目标构造器对象的call()创建出对应的实例;

class Item(var name:String){
    var price=0.0

    constructor(name: String,price:Double):this(name){
        this.price=price
    }
    constructor():this("未知商品"){

    }

}

fun main(args: Array<String>) {
    val itemClz= Item::class;
    val instance = itemClz.createInstance()
    println("createInstance()调用无参构造器创建实例")
    println(instance.name)
    println(instance.price)

    println("调用有参构造器创建实例")
    itemClz.constructors.forEach {
        if(it.parameters.size==2){
            val item = it.call("酸奶&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值