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

我想在Android中使用SurfaceView来保存Camera预览。 文档告诉我,我需要调用表面保持器的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没有构造函数。

我很困惑,为什么这样做不起作用,当这样做:

 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关键字;)

Interesting Posts