继续对反射进行实战。

获取构造方法:

先定义一个主构造方法,2个次构造方法,接下来咱们用反射来获取一下构造方法:

其结果:

[fun <init>(kotlin.Int, kotlin.String): com.kotlin.test13.MyTestClass4, fun <init>(kotlin.Int, kotlin.Boolean): com.kotlin.test13.MyTestClass4, fun <init>(kotlin.Int): com.kotlin.test13.MyTestClass4]

Process finished with exit code 0

其中有个细节需要注意:

居然在Kotlin中构造函数跟正常的函数都是KFunction,而在Java中构造函数是Constructor,而方法是Method,需要注意。

调用方法:

上面都已经能通过Kotlin反射来获取各种元素了,接下来咱们来调用一下,实际用的话调用的场景也是最多的,下面来看一下:

好,关健的就是如何来调用了,首先得获取要调用的方法,这里跟Java是不太一样的,如下:

好,接下来调用一下:

为啥,看一下错误提示:

那咱们可以这样处理:

如果我们将方法名称故意改成一个不存在的,此时也不会抛空指针,非常安全:

当然还可以如另一种处理方式,就是强制让它可以为空的调用,如下:

此时如果没找到方法,则就会抛空指针了,这是强烈不推荐这样用的:

好,接下来再来调带参数的方法:

瞅一下该call的定义:

操作属性:

此外还有另一种方式来调用属性,如下:

上面只是读取了属性,下面再看个例子,对其进行值的修改,看如何做?

这里就得先了解对于属性在Kotlin的表示了,我们知道是KProperty:

而对于可变的属性则是它:

其中有一个setter,所以设置值可以这么搞:

Kotlin反射实践操作详解的更多相关文章

  1. java反射机制深入详解

    java反射机制深入详解  转自:http://www.cnblogs.com/hxsyl/archive/2013/03/23/2977593.html 一.概念 反射就是把Java的各种成分映射成 ...

  2. MySQL 操作详解

    MySQL 操作详解 一.实验简介 本节实验中学习并实践 MySQL 上创建数据库.创建表.查找信息等详细的语法及参数使用方法. 二.创建并使用数据库 1. 创建并选择数据库 使用SHOW语句找出服务 ...

  3. Java基础13:反射与注解详解

    Java基础13:反射与注解详解 什么是反射? 反射(Reflection)是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性. Orac ...

  4. MongoDB各种查询操作详解

    这篇文章主要介绍了MongoDB各种查询操作详解,包括比较查询.关联查询.数组查询等,需要的朋友可以参考下   一.find操作 MongoDB中使用find来进行查询,通过指定find的第一个参数可 ...

  5. Linux Shell数组常用操作详解

    Linux Shell数组常用操作详解 1数组定义: declare -a 数组名 数组名=(元素1 元素2 元素3 ) declare -a array array=( ) 数组用小括号括起,数组元 ...

  6. [Android新手区] SQLite 操作详解--SQL语法

    该文章完全摘自转自:北大青鸟[Android新手区] SQLite 操作详解--SQL语法  :http://home.bdqn.cn/thread-49363-1-1.html SQLite库可以解 ...

  7. shell字符串操作详解

    shell字符串操作详解的相关资料. 1.shell变量声明的判断  表达式 含义 ${var} 变量var的值, 与$var相同 ${var-DEFAULT} 如果var没有被声明, 那么就以$DE ...

  8. memcached 命令操作详解

    memcached 命令操作详解 一.存储命令 存储命令的格式: <command name> <key> <flags> <exptime> < ...

  9. windows phone 8.1开发SQlite数据库操作详解

    原文出自:http://www.bcmeng.com/windows-phone-sqlite1/ 本文小梦将和大家分享WP8.1中SQlite数据库的基本操作:(最后有整个示例的源码)(希望能通过本 ...

随机推荐

  1. php删除目录及目录下的内容

    今天遇到一个问题: java写的API,ppt转图片生成的目录和文件 在使用php调用API完成后,再使用php进行删除时,遇到了删除失败的问题 部署的环境是Ubuntu 导致删除失败的原因是权限的问 ...

  2. Swarm 集群并用 Portainer 管理

    https://blog.csdn.net/zhrq95/article/details/79430284 使用docker-proxy代理服务(所有节点): docker pull docker.i ...

  3. Vue父子组件相互传值及调用方法的方案

    Vue父子组件相互传值及调用方法的方案 一.调用方法: 1.父组件调用子组件方法: 2.子组件调用父组件方法: 参考:https://www.cnblogs.com/jin-zhe/p/9523782 ...

  4. 【视频开发】ONVIF、RTSP/RTP、FFMPEG的开发实录

    ONVIF.RTSP/RTP.FFMPEG的开发实录 前言 本文从零基础一步步实现ONVIF协议.RTSP/RTP协议获取IPC实时视频流.FFMPEG解码.开发环境为WIN7 32位 + VS201 ...

  5. 基于SpringSecurity实现RBAC权限控制(待完善)

    Spring Security是一个为企业应用系统提供声明式的安全访问控制功能,减少为了企业应用系统安全控制而编写的大量重复代码. 认证: spring security的原理就是使用很多的拦截器对U ...

  6. javaSE总结(二)--java面向对象

    一.类和对象 (1)类 [修饰符] class 类名{ //修饰符1:private public protected 三个最多出现其一 //修饰符2:abstract final 两个最多出现其一 ...

  7. centos设置IP

    centos设置IP 原由:虚拟机里安装了很多软件,每天要使用,原来使用的动态IP,而且很长时间也没变,一直使用的很好,忽然一天访问不了了,找了几次才发现动态IP地址变了,这些后决定将虚拟机的IP地址 ...

  8. git第一次上传push失败解决

    第一次上传有可能会遇到push失败的情况,那是因为跟SVN一样,github上有一个README.md 文件没有下载下来 .我们得先 git pull --rebase origin master   ...

  9. [NOI2019]弹跳(KD-Tree/四分树/线段树套平衡树 优化建图+Dijkstra)

    本题可以用的方法很多,除去以下三种我所知道的就还有至少三种. 方法一:类似线段树优化建图,将一个平面等分成四份(若只有一行或一列则等分成两份),然后跑Dijkstra即可.建树是$O(n\log n) ...

  10. QRCode.js:使用 JavaScript 生成微信二维码

    https://www.runoob.com/w3cnote/javascript-qrcodejs-library.html 什么是 QRCode.js? QRCode.js 是一个用于生成二维码的 ...