全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Kotlin 基础教程之反射

Kotlin 基础教程之反射

概述

反射是语言与库中的一组功能, 可以在运行时刻获取程序本身的信息.在Kotlin中,不仅可以通过发射获取类的信息,同时可以获取函数和属性的信息。也就是说,在在运行时刻得到一个函数或属性的名称和数据类型) 可以通过简单的函数式, 或交互式的编程方式实现.

在Java平台上, 使用反射功能所需要的运行时组件是作为一个单独的JAR文件发布的( kotlinreflect.jar). 这是为了对那些不使用反射功能的应用程序, 减少其运行库的大小. 如果你需要使用反射, 请注意将这个.jar文件添加到你的项目的classpath中.

类引用

最基本的反射功能就是获取一个 Kotlin 类的运行时引用. 要得到一个静态的已知的 Kotlin 类的引用, 可以使用类字面值(class literal) 语法:

val c = MyClass::class

类引用是一个 KClass 类型的值.

在Kotlin中定义了系列的常量,来表示类的信息.

  1. simpleName: String? 类的名称
  2. qualifiedName: String? 类的全称,包括包名
  3. members: Collection

函数引用

使用 :: 操作符来实现函数的引用。在高级函数中,我们通常使用函数作为参数,在传递函数参数时通常都是用的函数引用,当时还不太理解,现在终于解惑了。

fun main(args: Array<String>) {
  val ages = listOf(18, 23, 17, 25)
  ages.filter(::isOld)
      .forEach(::println) // 打印:23,25
}

fun isOld(age: Int): Boolean = age > 20

这里,::isOdd 是一个 (Int) -> Boolean 函数类型的值。

如果我们需要使用一个类的成员函数, 或者一个扩展函数, 就必须使用限定符. 比如, String::toCharArray指向 String 上的一个扩展函数, 函数类型为: String.() -> CharArray

属性引用

在Kotlin中, 对于包级别的属性可以作为对象来访问, 方法是使用 :: 操作符,我们可以获取一个类型为 KProperty对象。

var x = 1
fun main(args: Array<String>) {
  println(::x.get()) // 打印结果为: "1"
  ::x.set(2)
  println(x) // 打印结果为: "2"
}

  1. 对于val属性,我们可以通过KProperty的get()函数可以得到属性值, 通过它的 name 属性可以得到属性名称.
  2. 对于var属性,返回的属性对象的类型为 KMutableProperty, 我们不仅可以通过get()和name获取该对象的属性值和属性名称,还可以通过set()函数设置其属性值。
  3. 对于访问类的成员属性, 我们需要使用限定符。返回的属性对象的类型为KProperty1

构造器引用

构造器引用可以用于使用函数类型对象的地方, 但这个函数类型接受的参数应该与构造器相同, 返回值应该是构造器所属类的对象实例. 引用构造器使用 :: 操作符, 再加上类名称.

 fun main(args: Array<String>) {
    var person = newPerson("Jone", 20, "SH", ::Person)
  }

  fun newPerson(name: String, age: Int, address: String, factory: (String, Int, String) -> Person) : Person{
    return factory(name, age, address)
  }

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Kotlin  # 反射  # 反射详解  # 反射使用方法  # Android kotlin使用注解实现防按钮连点功能的示例  # 教你一文搞懂Kotlin中的Jvm注解  # Kotlin中的反射机制深入讲解  # Kotlin 泛型边界型变及星投影使用详解  # Kotlin object的几种用法示例详解  # Kotlin 高阶函数与Lambda表达式示例详解  # Kotlin注解与反射的定义及创建使用详解  # 可以通过  # 是一个  # 我们可以  # 可以得到  # 这是  # 如果你  # 还可以  # 不太  # 再加上  # 希望能  # 作为一个  # 请注意  # 可以使用  # 要得  # 谢谢大家  # 来实现  # 所需要  # 应用程序  # 库中  # 返回值 


相关文章: 开源网站制作软件,开源网站什么意思?  南京网站制作费用,南京远驱官方网站?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  如何高效配置香港服务器实现快速建站?  正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?  宝塔建站助手安装配置与建站模板使用全流程解析  小型网站建站如何选择虚拟主机?  制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?  如何通过PHP快速构建高效问答网站功能?  如何快速上传自定义模板至建站之星?  如何选择靠谱的建站公司加盟品牌?  济南企业网站制作公司,济南社保单位网上缴费步骤?  如何通过商城免费建站系统源码自定义网站主题?  如何零基础在云服务器搭建WordPress站点?  如何正确选择百度移动适配建站域名?  网站好制作吗知乎,网站开发好学吗?有什么技巧?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  如何通过可视化优化提升建站效果?  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?  如何快速查询域名建站关键信息?  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  如何在橙子建站上传落地页?操作指南详解  建站主机数据库如何配置才能提升网站性能?  如何在阿里云域名上完成建站全流程?  建站之星2.7模板:企业网站建设与h5定制设计专题  制作网站外包平台,自动化接单网站有哪些?  高防服务器租用如何选择配置与防御等级?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  企业网站制作公司网页,推荐几家专业的天津网站制作公司?  常州自助建站费用包含哪些项目?  建站之星代理如何获取技术支持?  如何选择网络建站服务器?高效建站必看指南  如何登录建站主机?访问步骤全解析  如何在建站之星网店版论坛获取技术支持?  宝华建站服务条款解析:五站合一功能与SEO优化设置指南  如何用景安虚拟主机手机版绑定域名建站?  做企业网站制作流程,企业网站制作基本流程有哪些?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  网站制作员失业,怎样查看自己网站的注册者?  大型企业网站制作流程,做网站需要注册公司吗?  定制建站方案优化指南:企业官网开发与建站费用解析  如何快速生成高效建站系统源代码?  宿州网站制作公司兴策,安徽省低保查询网站?  移民网站制作流程,怎么看加拿大移民官网?  网站制作难吗安全吗,做一个网站需要多久时间?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  网站制作话术技巧,网站推广做的好怎么话术?  如何在IIS7上新建站点并设置安全权限?  建站主机选购指南:核心配置与性价比推荐解析 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。