如何从Kotlin中的类实例化对象

时间:2018-09-09 14:29:02

标签: android kotlin kotlin-android-extensions kotlin-extension

我正在学习Kotlin,并且用Google搜索了如何在Kotlin中创建课程。因此,我创建了下面的类作为测试。 在主要活动中,我试图从类Board实例化一个对象,但是出现以下错误:

classifier Board does not have a companion object

请让我知道如何初始化班级董事会的对象?

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
}

4 个答案:

答案 0 :(得分:3)

科特林不使用new

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

不正确。使用

val board = Board("ABC")

您的代码反映了Java语法。 Kotlin具有类型推断功能,因此您无需指定类类型。但是,如果您指定它,则它与Java不同:

val board: Board = Board("ABC")

在Kotlin中也不使用分号,尽管使用分号不会破坏编译。

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

答案 1 :(得分:0)

尝试忘记Java

val board = Board("name")

答案 2 :(得分:0)

  

科特林

当您要声明新对象时,yon可以这样做。

val board = Board("ABC")

如果使用 val 关键字声明对象。就像您在Java中使用 final 一样。您声明的变量无法重新创建。

var board = Board("ABC")

如果使用var声明它,则在Java中看起来像普通变量

无论如何,在Kotlin中,您都会看到它在Java中不包含的内容,例如 作用域功能如下所示。它将帮助您更轻松地编写代码。

https://kotlin.guide/scoping-functions

我希望这个帮助:)

答案 3 :(得分:0)

与Java不同,在Kotlin中,这是正确的方法

MainActivity.kt

setup(
    name=PROJECT,
    version=version,
    packages=get_packages(PROJECT),
    package_data=get_package_data(PROJECT),
    python_requires=">= 3.5",
)

Board.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
 }
}