如何在 class 文件中放置 Kotlin 扩展?

How to place a Kotlin extension in a class file?

也许 official doc 中回答了这个问题,但我没看到...

在Swift中我们习惯这样写

class Jazz {
...
}

extension Jazz {
    func swing() {
    ...
    }
}

并将整个代码片段放在一个文件中,比如 Jazz.swift

我们好像不能在Kotlin中做相应的事情?我总是发现自己在写作,例如一个 Jazz.kt 和一个 JazzExtensions.kt,这并不总是最清晰的代码结构方式。

感谢任何对此的意见。

您可以将扩展函数放在 class 内部或外部:

外面:

class Jazz { ... }

fun Jazz.bar() {
    println("hello")
}

里面(在companion object):

import YOUR_PACKAGE.Jazz.Companion.bar

fun main(args: Array<String>) {
    Jazz().bar()
}

class Jazz {
    companion object {
        fun Jazz.bar() {
            println("hello")
        }
    }
}

Swift差别不大:

class Jazz {
    val a = "Jazz"
}

fun Jazz.swing() = a

////////////

fun main(args: Array<String>) {
    print(Jazz().swing()) // >>> Jazz
}