实用 AI

可在线运行 AI 集合,涵盖 AI 文案生成、写作辅助、AI 绘图与照片修复、AI 配音、字幕生成、语音转录以及 AI 视频创作和数字人等多种 AI 服务

查看详情

kotlin中缀函数的使用

深入学习Kotlin基础知识
2022-07-07 14:23 · 阅读时长3分钟
小课

中缀函数是kotlin中的一个特性,Java中没有,所以对于Java开发者来说比较生疏,其实它和普通函数一样,只是多了一种调用形式和一些额外的限制。

申明中缀函数很简单,只需要使用infix关键字来修饰函数即可,中缀函数由于它调用的特殊性,所以它比普通函数多了一些限制。

  • 它们必须是成员函数或扩展函数;
  • 它们必须只有一个参数;
  • 其参数不得接受可变数量的参数且不能有默认值。

在平时开发中常用到中缀函数有and、or、xor、until、shl、shr等等。中缀函数比普通函数多了一种调用形式,常规的调用方式还是可以用,比如

println(1 until 5)   //1..4
println(1.until(5))  //1..4
println(1 or 0)      //1
println(1.or(0))     //1

下面看一个中缀函数的使用示例,假设我们使用下面的模型来定义扑克牌,定义两个枚举类型Kind和Number,分别代表花色和数字,Card类表示牌。

enum class Kind {
    HEARTS, SPADES, CLUBS, DIAMONDS
}
enum class Number {
    TWO, THREE, FOUR, FIVE, SIX, SEVEN,
    EIGHT, NINE, TEN, JACK, QUEEN, KING, ACE
}
data class Card(val number: Number, val kind: Kind)

比如说获取一个红桃Q实例,可以这样申明 val card = Card(Number.QUEEN, Kind.HEARTS),如果我们为Number类定义个普通方法。

enum class Number {
    ...
    fun of(kind: Kind) = Card(this, kind)
}

那么这样Number.QUEEN.of(Kind.HEARTS)就可以获取一个红桃Q的实例,如果把of方法定义为中缀函数。

enum class Number {
    ...
    infix fun of(kind: Kind) = Card(this, kind)
}

那么这样Number.QUEEN of Kind.HEARTS就可以获取一个红桃Q的实例,其实和普通函数一样,只是多了一种调用形式,不过这种调用形式在某些场景下会显得更加自然。

kotlin中缀函数infix