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

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

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

fun hello(){}

class MainActivity : AppCompatActivity() {

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

        hello()
    }
}

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

在文档中,他们谈到了经典函数的 Local Functions 和定义在类或对象中的函数的 Member Functions,但他们没有解释什么时候是最好使用其中一个。

最佳答案

In Java, this is impossible! That's not how an object-oriented language works normally, right?

稍等片刻,重新考虑一下 java 静态方法的本质。一个类应该是对象的蓝图,描述它们的行为和状态。但是你可以调用静态方法而不创建任何实例。

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

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

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

https://stackoverflow.com/questions/49013996/

相关文章:

kotlin - 如果事件是用 Kotlin 编写的,则按钮 onClick 属性为无

kotlin - 如何抑制未经检查的强制转换警告?

kotlin - 协程 : runBlocking vs coroutineScope

java - 如何使用 Maven 编译 Java+Kotlin 项目?

android - Kotlin - 如何在 "lateinit"和 "nullable varia

properties - 将静态变量从 Java 转换为 Kotlin

java - Kotlin - 为非数据类生成 toString()

android - Kotlin 惰性属性和值重置 : a resettable lazy dele

android - ArrayAdapter 使用 Kotlin android

types - 为什么 Kotlin Array 不实现 Iterable