Kotlin 基础教程之反射
Kotlin基础教程之反射
概述
反射是语言与库中的一组功能,可以在运行时刻获取程序本身的信息.在Kotlin中,不仅可以通过发射获取类的信息,同时可以获取函数和属性的信息。也就是说,在在运行时刻得到一个函数或属性的名称和数据类型)可以通过简单的函数式,或交互式的编程方式实现.
在Java平台上,使用反射功能所需要的运行时组件是作为一个单独的JAR文件发布的(kotlinreflect.jar).这是为了对那些不使用反射功能的应用程序,减少其运行库的大小.如果你需要使用反射,请注意将这个.jar文件添加到你的项目的classpath中.
类引用
最基本的反射功能就是获取一个Kotlin类的运行时引用.要得到一个静态的已知的Kotlin类的引用,可以使用类字面值(classliteral)语法:
valc=MyClass::class
类引用是一个KClass类型的值.
在Kotlin中定义了系列的常量,来表示类的信息.
- simpleName:String?类的名称
- qualifiedName:String?类的全称,包括包名
- members:Collection
函数引用
使用::操作符来实现函数的引用。在高级函数中,我们通常使用函数作为参数,在传递函数参数时通常都是用的函数引用,当时还不太理解,现在终于解惑了。
funmain(args:Array){ valages=listOf(18,23,17,25) ages.filter(::isOld) .forEach(::println)//打印:23,25 } funisOld(age:Int):Boolean=age>20
这里,::isOdd是一个(Int)->Boolean函数类型的值。
如果我们需要使用一个类的成员函数,或者一个扩展函数,就必须使用限定符.比如,String::toCharArray指向String上的一个扩展函数,函数类型为:String.()->CharArray
属性引用
在Kotlin中,对于包级别的属性可以作为对象来访问,方法是使用::操作符,我们可以获取一个类型为KProperty对象。
varx=1 funmain(args:Array){ println(::x.get())//打印结果为:"1" ::x.set(2) println(x)//打印结果为:"2" }
注
- 对于val属性,我们可以通过KProperty的get()函数可以得到属性值,通过它的name属性可以得到属性名称.
- 对于var属性,返回的属性对象的类型为KMutableProperty,我们不仅可以通过get()和name获取该对象的属性值和属性名称,还可以通过set()函数设置其属性值。
- 对于访问类的成员属性,我们需要使用限定符。返回的属性对象的类型为KProperty1
构造器引用
构造器引用可以用于使用函数类型对象的地方,但这个函数类型接受的参数应该与构造器相同,返回值应该是构造器所属类的对象实例.引用构造器使用::操作符,再加上类名称.
funmain(args:Array){ varperson=newPerson("Jone",20,"SH",::Person) } funnewPerson(name:String,age:Int,address:String,factory:(String,Int,String)->Person):Person{ returnfactory(name,age,address) }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!