kotlin:infix函数

813 阅读1分钟

infix函数(中缀方法):

用infix关键字标记的函数即为中缀函数,他可以使用中缀方式调用(省略点号和小括号的调用方式)

infix函数(中缀方法)需要几个条件:

  • 只有一个参数
  • 在方法前必须加infix关键字
  • 必须是成员方法或者扩展方法
  • 不接受可变数量的参数,并且不能有默认值

infix函数的优先级

1infix函数的调用优先级低于算术运算符、类型转换和 rangeTo 运算符。
2infix函数的调用优先级高于布尔运算符 && 和 ||、isin 以及其他一些运算符

注意

当您使用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 

参考链接: