java+infix,infix关键字标识

从mapOf赋值说起

mapOf初始化生成一个key-value的map非常简洁,突然觉得很好奇它是怎么实现的。先来看看一段mapOf赋值代码

val m = mapOf(

"a" to 11

, "b" to 22

, "c" to 3

)

进入mapOf源码调用了扩展函数,构造一个Pair

public infix fun A.to(that: B): Pair = Pair(this, that)

也就是说 receiver to argument 在kotlin中是一个特殊的函数to的调用语法。实际这也是kotlin DSL的基石。

实现自定义DSL方式函数调用

是否所有扩展函数或对象的函数都支持这样的调用方式呢?答案是不是。只有在函数标识为infix才可以使用这样的调用方式。 比如

public infix fun String.hello( name:String) = println( "$this say:hello $name!")

"obaniu" hello "world"

infix的最终行为

如上面可知infix标识完全是编译器的语法糖,infix的函数生成的java函数标识是static的

public static final void hello(@NotNull String $receiver, @NotNull String name){

Intrinsics.checkParameterIsNotNull($receiver, "$receiver");Intrinsics.checkParameterIsNotNull(name, "name");String str = "" + $receiver + " say:hello " + name + '!';System.out.println(str);

}

好吧,可以说kotlin这么玩就是想要DSL一样爽一样花哨的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值