我不明白为什么可以在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 ,但他们最好不要使用其中一个或另一个 .
2 回答
暂停一下,重新考虑java静态方法的本质 . 一个类应该是对象的蓝图,描述它们的行为和状态 . 但是您可以在不创建任何实例的情况下调用静态方法 .
这如何适应面向对象的图片?静态方法如何“属于”它声明的类?
实际上,静态方法在Java中是一种破解,它们会污染和滥用类的OOP概念 . 但是你多年来习惯了他们,所以你不再感觉到了 .
从概念上讲,静态方法是顶级函数,Java使用其声明类的名称作为其命名空间 . 与此相反,Kotlin允许您声明顶级函数,而不会滥用类的命名空间 .
是的,这是一个很好的做法 . Kotlin不是一种纯粹的面向对象语言,因此没有义务遵循“面向对象语言正常工作”的方式(即使其他面向对象语言,如C,Ruby和Python,也允许顶层函数) .
当此函数的逻辑不明确属于任何类时,最好使用顶级函数 .