You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

实现CameraResultReturner接口时,能否移除当前类未使用的重写方法?

问题与解答:接口未使用方法的重写移除问题

问题背景

我有如下类:

class CameraFragment : Fragment() {

    interface CameraResultReturner {
        fun returnCameraBarcode(result: String)
        fun returnCameraBitmap(result: Boolean)
        fun returnCameraBitmapAndBarcode(result: String, bitmap: Bitmap?)
    }

另有一个接收CameraFragment响应的类:

class TaskLinkFragment : Fragment(R.layout.fragment_task_link),
    CameraFragment.CameraResultReturner,
    BarcodeInfoFragment.BarcodeInfoListener,
    BarcodeListFragment.BarcodeListListener {

相应地,TaskLinkFragment中需重写三个方法:

override fun returnCameraBarcode(result: String) {
//does nothing
    }

override fun returnCameraBitmap(result: Boolean) {
//does nothing
    }

override fun returnCameraBitmapAndBarcode(result: String, bitmap: Bitmap?) {
       //does something
    }

已知这些未使用的方法在其他类中会被用到,请问能否在该类中移除这些未使用的重写方法?

解答

不能直接删掉这两个空实现的方法,原因很简单:

  • 在Kotlin里,类实现接口时必须重写接口的所有抽象方法,不然编译器直接报错。CameraResultReturner里的三个方法都是抽象的,没有默认实现,所以TaskLinkFragment只要实现了这个接口,就必须把三个方法都重写一遍。
  • 这俩方法在你这个类里没用,但其他类需要用是另一回事,不影响当前类必须遵守的接口实现规则。

要是嫌空代码看着冗余,给你两个优化思路:

  1. 给接口方法加默认实现:修改CameraResultReturner接口,给不需要强制实现的方法加个空的默认逻辑,这样实现类就只需要重写自己用到的方法就行。比如:
interface CameraResultReturner {
    fun returnCameraBarcode(result: String) {}
    fun returnCameraBitmap(result: Boolean) {}
    fun returnCameraBitmapAndBarcode(result: String, bitmap: Bitmap?)
}

改完之后,TaskLinkFragment就只需要写returnCameraBitmapAndBarcode的实现,另外两个方法会自动用接口里的空实现,不用自己写了。
2. 拆分接口:把CameraResultReturner拆成几个更细的接口,比如单独的BarcodeReturner、BitmapReturner、BarcodeAndBitmapReturner,让TaskLinkFragment只实现自己需要的那个接口。这种方式更贴合“接口隔离”的思路,避免实现类被迫处理不需要的方法。

内容的提问来源于stack exchange,提问作者Snakecatcher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 08:38:00