如何在 kotlin 中从 class 实例化一个对象

how to instantiate an object from a class in kotlin

我正在学习 Kotlin,我在 google 上搜索了如何在 kotlin 中创建 class。所以,我创建了下面的 class 作为测试。 在主要 activity 中,我试图从 class 板上实例化一个对象,但出现以下错误:

classifier Board does not have a companion object

请告诉我如何实例化 class 板的对象?

MainActivity:

class ActMain : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.layout_act_main)

    Board board = new Board(name = "ABC");
}
}

Board.kt:

data class Board(val name: String) {
    var age: Int = 0
}

试着忘记java

val board = Board("name")

Kotlin 不使用 new

Board board = new Board(name = "ABC");

不正确。使用

val board = Board("ABC")

您的代码反映了 Java 语法...有点。 Kotlin 有类型推断,所以你不需要指定 class 类型。但是,如果您指定它,它与 Java:

不同
val board: Board = Board("ABC")

分号在 Kotlin 中也不常用,尽管如果您使用它们不会破坏编译。

name = "ABC" 只是无效语法,无论它是 Java 还是 Kotlin。 实际上是(来自@hotkey):https://kotlinlang.org/docs/reference/functions.html#named-arguments

in kotlin

当你想声明新对象时,你可以这样做。

val board = Board("ABC")

如果您使用 val 关键字声明对象。它看起来像您在 java 中使用 final。您声明的变量无法重新创建。

var board = Board("ABC")

如果你使用 var 声明它在 java

中看起来像普通变量

无论如何,在 kotlin 中,您会看到 java 中不包含的内容,例如 作用域函数如下 link。它将帮助您更轻松地编写代码。

https://kotlin.guide/scoping-functions

希望对您有所帮助:)

不同于Java,在Kotlin中这是正确的方式

MainActivity.kt

class ActMain : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.layout_act_main)

        val board = Board("ABC")
        board.age = 12
    }
}

Board.kt

class Board(val name: String) {
    var age: Int = 0
}