java+infix_[学习]拥抱kotlin(Infix)

我遇到了 Infix 函数。尽量一个就是一天,下次找的时候方便。

有了这个函数就相当于自己定义了一种操作,跟自定义操作符差不多,但是又不一样,首先自定义操作符是那些特殊字符,比如 + , - 和 * 等等。C++ 里面有,只不过很久没看了也忘了。 kotlin 这个的命名规范跟变量一样,我自己简单的使用了一下,发现除了写法多了,其他的跟函数相同; Infix 必须满足以下要求:

必须是成员函数或扩展函数;

必须有且仅有一个参数;

参数必须不是可变参数( vararg 修饰)和参数不能有默认值。

先看成员函数的例子

class Learn {

var learnDay = 0

infix fun test(learn: Learn): Learn {

this.learnDay += learn.learnDay

return this

}

fun bufu(learn: Learn): Learn {

this.learnDay = 0

return this

}

}

fun main() {

val learn1 = Learn()

learn1.learnDay = 2

val learn2 = Learn()

learn2.learnDay = 5

learn1 test learn2

// learn1 bufu learn2 这样会提示添加 infix 关键词

println(learn1.learnDay) // 7

}

除了直接调用 learn1 test learn2 ,仍然可以像函数一样 learn1.test(learn2) 的方式调用;这里所谓的成员函数,也就是在类中的函数;下面看扩展函数:

fun main() {

infix fun Int.add(digit: Int): Int {

return this + digit

}

println(1 add 2) // 3

}

扩展函数有定义:

Kotlin provides an ability to extend a class with new functionality without having to inherit from the class or use design patterns such as Decorator. This is done via special declarations called extensions.

For example, you can write new functions for a class from a third-party library that you can't modify. Such functions are available for calling in the usual way as if they were methods of the original class. This mechanism is called extension functions. There are also extension properties that let you define new properties for existing classes.

大体的函数就是在不继承的情况下,也能动态的给类添加函数,比如我们像让 ArrayList 拥有找出第二大值的函数,但是呢默认 ArrayList 类并没有提供,怎么办, java 中的做法就是编写一个类,然后继承 ArrayList 这个类,然后再编写,想想就很麻烦,但是 kotlin 就很方便。扩展函数就有扩展属性,扩展属性跟扩展方法相似,但是今天说的这个不能修饰属性。没想到在学习的时候学到了新的东西,下次就记录扩展函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值