为什么可以在 Kotlin 的类之外编写函数?

2022-08-31 20:53:05

我不明白为什么可以在Kotlin的类之外编写一个函数?这是一个好的做法吗?

例如,在 Kotlin 中,可以在我的类之外编写一个函数:MainActivity

fun hello(){}

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        hello()
    }
}

在Java中,这是不可能的!这不是面向对象语言的正常工作方式,对吧?

在文档中,他们谈论经典函数的局部函数和在类或对象中定义的函数的成员函数,但他们没有解释何时最好使用一个或另一个。


答案 1

在Java中,这是不可能的!这不是面向对象语言的正常工作方式,对吧?

只需停下来一秒钟,重新考虑Java静态方法的本质。类应该是对象的蓝图,描述它们的行为和状态。但是,您可以调用静态方法,而无需创建任何实例。

这如何适应面向对象的画面?静态方法如何“属于”它所声明的类?

实际上,静态方法是Java中的一种黑客行为,它们污染并滥用了类的OOP概念。但是这些年来你已经习惯了它们,所以你不再有这种感觉了。

从概念上讲,静态方法是顶级函数,Java 使用其声明类的名称作为其命名空间。与此相反,Kotlin 允许您声明顶级函数,而不会滥用类进行命名空间。


答案 2

是的,这是很好的做法。Kotlin 不是一种纯粹的面向对象语言,因此它没有义务遵循“面向对象语言的正常工作方式”(即使其他面向对象的语言,如 C++、Ruby 和 Python,也允许顶级函数)。

当此函数的逻辑明确不属于任何类时,最好使用顶级函数。


推荐