16.2 函数式接口

16.2 函数式接口

标签(空格分隔): kotlin 出版
书名:Kotlin基础教程
作者:陈小默


函数式接口是Java8中新增的一个重要特性,是为了配合Lambda而提出的一个新概念。下面我们来展示一下Java中如何使用函数式接口去实现从一个字符串向整型数字的转换:
首先,定义一个接口

public interface Convertor<F, T> {
    T convert(F from);
}

然后,在main方法中使用Lambda中实现并使用这个接口

public static void main(String[] args) {
        Convertor<String, Integer> convertor = Integer::parseInt;
        System.out.print(convertor.convert("22"));
    }

看起来已经很简洁了,但是仍然远不如Kotlin。虽然这一节的名字叫做函数式接口,但是Kotlin实现这样的功能并不需要去编写一个真正接口。来,让我们先欣赏以下Kotlin的实现方式:

fun main(args: Array<String>) {
    var convert = String::toInt
    print(convert.invoke("22"))
}

就是如此简洁,甚至不需要指定方法名,Kotlin已经为调用匿名函数式接口提供了一个invoke方法。

符号说明

在上面几个例子中,我们主要使用了两个符号”->”,”::”,下面我们来重点介绍以下这些操作符的含义

“->”(goes to)操作符
该操作符的含义是用来分隔 参数列表 与 代码块,举个例子

fun main(args: Array<String>) {
    var convert = { arg: String -> arg.toInt() }
    println(convert.invoke("22"))
}

第二行大括号里符号的含义是:该匿名方法有一个参数arg,且参数类型被指定为String,操作符表示左侧的参数传递给右侧的方法体,方法调用参数的toInt方法的到并推论出匿名函数的返回值类型为Int

“::域名解析符”
顾名思义,该符号是用来指明所调用的方法的入口地址的。
比如 var convert = String::toInt 这句话的含义是定义一个匿名方法,通过推断发现这个匿名方法的返回值是Int类型,而toInt是String类型的方法,所以推断接收参数类型为String类型。所以该匿名方法的调用过程就是:当接收到一个String类型的参数是,根据域名解析符从参数上找到将要被调用的方法toInt。一次执行过程就结束了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值