Внедрение интерфейса анонимно в Kotlin приводит к ошибке «не имеет конструкторов»

Я пытаюсь использовать SurfaceView в Android для предварительного просмотра камеры. Документация говорит мне, что мне нужно вызвать startPreview в обратном вызове surfaceCreated для держателя поверхности. Я пытаюсь установить обратный вызов так

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: выражение :

 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 для переопределенного метода;)