我有以下代码:
class Camera : AsyncActiveInputDevice<Image> {
constructor(inputListener: ((Image) -> Unit)? = null) {
this.inputListener = inputListener
}
override var inputListener: ((Image) -> Unit)?
set(value) {
field = value
TODO("call C/Python implementation")
}
}
并且IntelliJ IDEA建议将构造函数转换为主要构造函数。
那么如何转换呢?如何在主构造函数中使用setter初始化属性?我已经尝试过init
块,但是它显示了一个错误:“变量不能在声明前初始化”。
答案 0 :(得分:2)
这样的主要构造函数会放在类的标题中,如下所示:
class Camera(inputListener: ((Image) -> Unit)? = null) : AsyncActiveInputDevice<Image> {
override var inputListener: ((Image) -> Unit)? = inputListener
set(value) {
field = value
TODO("call C/Python implementation")
}
}
您可以通过对警告调用意图操作(在Windows上为 Alt + Enter ,在macOS上为⌥↩)并选择转换为主要构造函数。
答案 1 :(得分:2)
init块必须在变量声明之后 之后出现。这就是错误消息告诉您的内容:
class Camera(inputListener: ((Image) -> Unit)? = null): AsyncActiveInputDevice<Image> {
override var inputListener: ((Image) -> Unit)? = inputListener
set(value) {
field = value
TODO("call C/Python implementation")
}
init {
this.inputListener = inputListener
}
}