首页 文章

为什么可以在Kotlin的课堂外写一个函数?

提问于
浏览
14

我不明白为什么可以在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 回答

  • 19

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

    暂停一下,重新考虑java静态方法的本质 . 一个类应该是对象的蓝图,描述它们的行为和状态 . 但是您可以在不创建任何实例的情况下调用静态方法 .

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

    实际上,静态方法在Java中是一种破解,它们会污染和滥用类的OOP概念 . 但是你多年来习惯了他们,所以你不再感觉到了 .

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

  • 11

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

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

相关问题