为什么我们不在 Kotlin 的类中编写 main() ?

Nee*_*eeK 2 kotlin

为什么 kotlin 不允许像 Java 一样在类中使用 main() 函数?为什么允许在课堂外这样做?这不是违背了OOP原则吗?我很疑惑!

class Person ( var name : String, var age : Int) {
    // putting main here
    fun main(args : Array<String>) {
        val person = Person("Neek", 34)
        println("my name is ${person.name}")
        println("my name is ${person.age}")
    }
}
Run Code Online (Sandbox Code Playgroud)

尝试在类中包含 main() ,我收到以下错误。

warning: parameter 'args' is never used
    fun main(args : Array<String>) {
no main manifest attribute
Run Code Online (Sandbox Code Playgroud)

cut*_*iko 12

您可以在 Kotlin 类上编写该main方法,它必须位于companion object

class SuperCoolProgram {

    companion object {
        @JvmStatic
        fun main(args: Array<String>) {
            println("Hello Super Cool Program")
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

静态方法只能写在里面,companion object因为它是唯一的静态方法


Raf*_*afa 6

Kotlin 作为一种语言并不强制您采用 OOP。Java 是唯一真正让您将所做的一切都封装在类中的 Java 之一。

实际上,您可以在 Kotlin 中跨多个不同文件在文件级别编写所有代码。无需上课。

如果您反编译代码并查看它,您声明的文件中发生了什么

fun main(args: Array<String>) {..}
Run Code Online (Sandbox Code Playgroud)

是它被包装在一个与其所在文件同名的类中。

如果您在名为 Foo.kt 的文件中包含上述代码,那么这就是实际生成的内容

class FooKt {

     public static void main(String[] args) { }
}
Run Code Online (Sandbox Code Playgroud)

其中类的名称是文件名+“Kt”