好的,init
不是构造函数的主体。它在主构造函数后被调用,并与主构造函数具有相同的上下文。
根据官方文档:
主构造函数不能包含任何代码。初始化代码可以放置在初始化块中,这些块以init
关键字为前缀:
class Customer(name: String) {
init {
logger.info("Customer initialized with value ${name}")
}
}
请注意主构造函数的参数可以在初始化块中使用。它们也可以用于在类体中声明的属性初始化程序中:
请注意主构造函数的参数可以在初始化块中使用。它们也可以用于在类体中声明的属性初始化程序中:
class Customer(name: String) {
val customerKey = name.toUpperCase()
}
实际上,对于声明属性并从主构造函数初始化它们,Kotlin有一种简洁的语法:
class Person(val firstName: String, val lastName: String, var age: Int) {
}
根据您的问题,您可以添加一个构造函数来接受一个参数,如下所示:
class Person(name: String, surname: String) {
constructor(name: String) : this(name, "") {
}
init {
Log.d("App", "Hello");
}
}
但是我们不需要传递第二个参数为空字符串,因此我们可以按照以下方式排序构造函数:
class Person(name: String) {
constructor(name: String, surname: String) : this(name) {
}
init {
Log.d("App", "Hello");
}
}
希望这有所帮助。
this(name)
调用主构造函数吗?如果是,我们能记录日志进行检查吗? - N Sharmathis()
用于调用构造函数,其参数签名定义了要调用哪个构造函数。 - Sachin Chandilinit
块中,就可以解决问题。 - Sachin Chandil