infix函数(中缀方法):
用infix关键字标记的函数即为中缀函数,他可以使用中缀方式调用(省略点号和小括号的调用方式)
infix函数(中缀方法)需要几个条件:
- 只有
一个参数 - 在方法前必须加
infix关键字 - 必须是
成员方法或者扩展方法 - 不接受可变数量的参数,并且不能有默认值
infix函数的优先级
1,infix函数的调用优先级低于算术运算符、类型转换和 rangeTo 运算符。
2,infix函数的调用优先级高于布尔运算符 && 和 ||、is 和 in 以及其他一些运算符
注意
当您使用infix表示法在当前接收器上调用方法时,必须显式使用它,否则解释器可能无法正常解析
如下
class MyStringCollection {
infix fun add(s: String) { /*...*/ }
fun build() {
this add "abc" // Correct
add("abc") // Correct
//add "abc" // Incorrect: the receiver must be specified
}
}
内置infix
public infix fun <A, B> A.to(that: B): Pair<A, B> = Pair(this, that)
- 1.使用泛型将to()方法定义到了类型A下,并且接收一个B类型参数。
- 2.创建并返回一个Pair对象。
使用范例
1, 扩展方法使用
public infix fun String.and(that: String): String = "$this $that"
val str = "abc" and "def" and "ghk"
println(str) // abc def ghk
2,成员方法使用
class Person(val name: String) {
val likedPeople = mutableListOf<Person>()
infix fun likes(other: Person) { likedPeople.add(other) } // 6
}
val sophia = Person("Sophia")
val claudia = Person("Claudia")
sophia likes claudia
参考链接: