是否可以不覆盖界面中的方法?

Is it possible not to override methods from the interface?

提问人:Snakecatcher 提问时间:7/12/2023 更新时间:7/12/2023 访问量:98

问:

我有一个班级:


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
    }

是否可以删除此类中未使用的方法,因为它们在其他类中使用?

什么也没想到。

Android Kotlin 接口 回调

评论


答:

0赞 Atick Faisal 7/12/2023 #1

您可以将修饰符添加到未使用的函数中。这使得函数可以替代。open

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

评论

0赞 Snakecatcher 7/12/2023
不幸的是,它给出了一个错误。工作:stackoverflow.com/a/76666144/17474067
1赞 Oscar Emilio Perez Martinez 7/12/2023 #2

我建议您不要添加 open 修饰符,而是为这些函数添加默认实现

interface CameraResultReturner {
    // Empty implementation
    fun returnCameraBarcode(result: String) = Unit

     // Empty implementation
    fun returnCameraBitmap(result: Boolean) = Unit

    // Empty implementation
    fun returnCameraBitmapAndBarcode(result: String, bitmap: Bitmap?) = Unit
}


class MyCameraResultFragment : CameraResultReturner {
    // No need to override the methods, as they already have empty implementations
}

评论

0赞 Snakecatcher 7/12/2023
多谢!它正在工作!