Kotlin扩展功能与成员功能?

Far*_*deh 5 kotlin kotlin-extension

我知道在Kotlin中使用扩展函数来扩展类的功能(例如,来自库或API的功能).

但是,在代码可读性/结构方面,使用扩展函数是否有任何优势:

class Foo { ... }

fun Foo.bar() {
    // Some stuff
}
Run Code Online (Sandbox Code Playgroud)

与成员函数相反:

class Foo {

    ...

    fun bar() {
        // Some stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

有推荐的做法吗?

jrt*_*ell 7

何时使用成员函数

如果满足以下所有条件,则应使用成员函数:

  • 该代码最初是在Kotlin中编写的
  • 您可以修改代码
  • 该方法有意义,可以使用任何其他代码

何时使用扩展功能

如果符合以下任何条件,则应使用扩展功能:

  • 代码最初是用Java编写的,你想要添加用Kotlin编写的方法
  • 您无法更改原始代码
  • 您需要一个仅对代码的特定部分有意义的特殊功能

为什么?

通常,成员函数比扩展函数更容易找到,因为它们保证在它们所属的类中(或超类/接口).

它们也不需要导入到使用它们的所有代码中.


Oli*_*rth 6

从我的角度来看,使用扩展功能有两个令人信服的理由:

  1. 要"扩展"一个类的行为,你不是作者/不能改变的(并且继承没有意义或不可能).

  2. 为特定功能提供范围.例如,扩展函数可以被声明为独立函数,在这种情况下它可以在任何地方使用.或者您可以选择将其声明为另一个类的(私有)成员函数,在这种情况下,它只能从该类内部使用.

听起来#1在你的情况下并不是一个问题,所以它真的更像是#2.