在Kotlin中匿名实现接口会导致"没有构造函数"错误

rob*_*obz 5 constructor compiler-errors interface anonymous-class kotlin

我正在尝试在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) {

    }
})
Run Code Online (Sandbox Code Playgroud)

但是,我收到错误:

SurfaceHolder.Callback没有构造函数.

我很困惑为什么当这样的事情发生时这不起作用:

Thread(Runnable() {
    fun run() {
        ...        
    }
})
Run Code Online (Sandbox Code Playgroud)

Pau*_*tos 7

要创建匿名子类的对象,您需要使用object:表达式:

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) {
        ... 
    }
})
Run Code Online (Sandbox Code Playgroud)

并且不要忘记使用override关键字per perridden方法;)