继续学习Kotlin反射相关的东东。

KClass:

在上一次是通过类来获取它的KClass对象:

那如果是一个对象呢?与这个对象对应的类的KClass对象又是如何获取的呢?像Java也是一样有相关机制的,下面看一下:

其实使用跟用类是一样的,那结果是啥呢?运行一下:

这样就打出来了具体类型了,由于是咱们自己定义的类,所以其KClass和Class是同一个,跟上一次用的系统类输出是不一样的。

函数(方法)引用:

由于在之前JAVA8中已经详细学习过方法引用了,就不多解释了,它其实是Lambda表达式的一种更加简洁的写法, 下面来看一下在Kotlin中的使用:

这里当然得用Lambda表达式的方式喽,具体如下:

对于函数引用其实也支持重载的方式,编译器会自动来选择对应的函数,啥意思,下面举例说明一下,再定义一个函数:

接下来修改一下程序:

那,对于第一个"::mutiplyBy3"和第二个"::mutiplyBy3"倒底对应哪个类型呢?我们可以将一个函数引用赋值给一个变量,下面来看一下:

上面这种函数是定义在包级别的,而非放在类中,那。。如果将函数定义在某个类中,那其方法引用又如何来写呢,比如说Kotlin中的String类:

那很明显它是一个实例方法,也可以用方法引用的方式来定义函数,所以我们可以这样写:

那请问下myRefrence3的类型声明应该是咋样的?很简单嘛:

但此时是不对的,现在是类里面的函数了,所以应该要带上类了,如下:

要想比较轻松的理解Kotlin的方法引用,前提是要对Java8的方法引用有比较深刻的了解才行,不然这块确实是有些抽象。

一个较复杂的高阶函数(函数组合)演练: 

啥叫高阶函数这里就不多说了,其实就是一个函数参数中是传的一个函数,也就是函数套函数,如今这种形式在很多的开源框架上都得到了大量的运用,所以下面定义一个比较绕的函数,然后将们的思维进行操练来适应这种新的编程范式,如下:

晕了木有。。解释一下,其实要习惯这种函数链函数最终生成一个新的结果的方式:

其实简单来说,就是A参数经过g函数生成的结果再作为f函数的参数再生成整个myCompose函数的结果,有点绕,其实如果Java8学得比较扎实的话看这种程序其实是比较顺其自然的,就是函数式编程的范示,下面来完成整个函数的函数体:

那定义这个组合函数有啥用呢?由于该函数需要两个函数做为参数,所以在调用之前再定义两个函数:

那接下来调用一下myCompose(),其效果是从字符串集合中找出其字符串长度是偶数的元素,如下:

KClass与函数引用详解的更多相关文章

  1. php中关于引用(&)详解

    php中关于引用(&)详解 php的引用(就是在变量或者函数.对象等前面加上&符号) 在PHP 中引用的意思是:不同的变量名访问同一个变量内容. 与C语言中的指针是有差别的.C语言中的 ...

  2. C++引用(&)详解

    C++引用详解 引用的概念 引用:就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样. 引用的声明方法:类型标识符 &引用名=目标变量名: 如下:定义引用ra,它是变量a的引 ...

  3. C++11 左值、右值、右值引用详解

    C++11 左值.右值.右值引用详解 左值.右值 在C++11中所有的值必属于左值.右值两者之一,右值又可以细分为纯右值.将亡值. 在C++11中可以取地址的.有名字的就是左值,反之,不能取地址的.没 ...

  4. PHP之PHP文件引用详解

    HP的文件引用涉及到四个函数: 文件引用 1.include()2.include_once()3.require()4.require_once() 这四个函数常常会给PHP初学者造成困扰,总的来说 ...

  5. 【Python】Python内置函数dir详解

    1.命令介绍 最近学习并使用了一个python的内置函数dir,首先help一下: 复制代码代码如下: >>> help(dir)Help on built-in function ...

  6. 2020你还不会Java8新特性?方法引用详解及Stream 流介绍和操作方式详解(三)

    方法引用详解 方法引用: method reference 方法引用实际上是Lambda表达式的一种语法糖 我们可以将方法引用看作是一个「函数指针」,function pointer 方法引用共分为4 ...

  7. Python函数参数详解

    Python函数参数详解 形参与实参 什么是形参 在定义函数阶段定义的参数称之为形式参数,简称形参,相当于变量名. 什么是实参 在调用函数阶段传入的值称为实际参数,简称实参.相当于"变量值& ...

  8. Go语言Slice作为函数参数详解

    Go语言Slice作为函数参数详解 前言 首先要明确Go语言中实质只有值传递,引用传递和指针传递是相对于参数类型来说. 个人认为上诉的结论不对,把引用类型看做对指针的封装,一般封装为结构体,结构体是值 ...

  9. 自写函数VB6 STUFF函数 和 VB.net 2010 STUFF函数 详解

    '*************************************************************************'**模 块 名:自写函数VB6 STUFF函数 和 ...

随机推荐

  1. Mac Pro 2015休眠掉电解决办法

    硬件:Mac Pro 2015 系统:MacOs Mojave 10.14.3 问题:合盖的时候,休眠1小时掉电10%,由于之前是128G原装盘不会有这个问题,后面购买了M.2转接卡,更换1T Int ...

  2. photoshop7.0 排版一寸照片、2寸照片

    说明:必须先照一张一寸电子照片,否则是无法做成 1.本例同样采用photoshop CS5制作,其它版本通用,这里采用上一教程“PS照片处理教程-制作一寸照片并排版”的处理效果图进行排版,首先在PS中 ...

  3. 机器学习中什么是端到端的学习(end-to-end learning)?

    相对于深度学习,传统机器学习的流程往往由多个独立的模块组成,比如在一个典型的自然语言处理(Natural Language Processing)问题中,包括分词.词性标注.句法分析.语义分析等多个独 ...

  4. 在有nginx做反向代理时候,如何获取用户真实Ip信息

    在获取用户的Ip地址时,不一定可以获取到用户真实的地址信息,这要看代理服务器的类型,代理服务器有普通匿名代理服务器,高匿代理服务器,像这种情况很难获取到用户真实的Ip地址 假如用户没有使用匿名代理服务 ...

  5. 【C语言】崩溃的双重指针

    指针的指针? 前言: 指针的初识点击移步 双重指针: 指向指针的指针是一种多级间接寻址的形式,或者说是一个指针链.通常,一个指针包含一个变量的地址.当我们定义一个指向指针的指针时,第一个指针包含了第二 ...

  6. 挂载一个NFS共享

    在 system2 上挂载一个来自 system1.group8.example.com 的NFS共享,并符合下列要求: 1./public 挂载在下面的目录上 /mnt/nfsmount 2./pr ...

  7. 常用 Maven 仓库地址

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/niuzhucedenglu/article ...

  8. Mysql表字段命令alter add

    alter add命令用来增加表的字段. alter add命令格式:alter table 表名 add字段 类型 其他; 例如,在表MyClass中添加了一个字段passtest,类型为int(4 ...

  9. 【已解决】ArcMap的界面如何恢复默认设置

    解决方案:在C盘内搜索“Normal.mxt”,将它删除,然后重启ArcMap,即可.  效果图:

  10. Tomcat组件梳理—Service组件

    Tomcat组件梳理-Service组件 1.组件定义 Tomcat中只有一个Server,一个Server可以用多个Service,一个Service可以有多个Connector和一个Contain ...