在 Kotlin 中匿名实现接口会导致 "has no constructors" 错误
Implementing Interface anonymously in Kotlin results in "has no constructors" error
我正在尝试使用 Android 中的 SurfaceView 来进行相机预览。文档告诉我,我需要在表面支架的 surfaceCreated 回调中调用 startPreview。我正在尝试像这样设置回调
this.surface!!.holder!!.addCallback(SurfaceHolder.Callback() {
fun surfaceChanged(holder: SurfaceHolder, format: Int,
width: Int, height: Int) {
}
fun surfaceCreated(holder: SurfaceHolder) {
}
fun surfaceDestroyed(holder: SurfaceHolder) {
}
})
但是,我收到错误消息:
SurfaceHolder.Callback has no constructors.
我很困惑为什么在这样的情况下它不起作用:
Thread(Runnable() {
fun run() {
...
}
})
要创建 匿名子类的对象 您需要使用 object:
expression:
this.surface!!.holder!!.addCallback(object: SurfaceHolder.Callback {
override fun surfaceChanged(holder: SurfaceHolder, format: Int,
width: Int, height: Int) {
...
}
override fun surfaceCreated(holder: SurfaceHolder) {
...
}
override fun surfaceDestroyed(holder: SurfaceHolder) {
...
}
})
并且不要忘记使用 override
关键字 per 重写方法 ;)
我正在尝试使用 Android 中的 SurfaceView 来进行相机预览。文档告诉我,我需要在表面支架的 surfaceCreated 回调中调用 startPreview。我正在尝试像这样设置回调
this.surface!!.holder!!.addCallback(SurfaceHolder.Callback() {
fun surfaceChanged(holder: SurfaceHolder, format: Int,
width: Int, height: Int) {
}
fun surfaceCreated(holder: SurfaceHolder) {
}
fun surfaceDestroyed(holder: SurfaceHolder) {
}
})
但是,我收到错误消息:
SurfaceHolder.Callback has no constructors.
我很困惑为什么在这样的情况下它不起作用:
Thread(Runnable() {
fun run() {
...
}
})
要创建 匿名子类的对象 您需要使用 object:
expression:
this.surface!!.holder!!.addCallback(object: SurfaceHolder.Callback {
override fun surfaceChanged(holder: SurfaceHolder, format: Int,
width: Int, height: Int) {
...
}
override fun surfaceCreated(holder: SurfaceHolder) {
...
}
override fun surfaceDestroyed(holder: SurfaceHolder) {
...
}
})
并且不要忘记使用 override
关键字 per 重写方法 ;)