实现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只要实现了这个接口,就必须把三个方法都重写一遍。 - 这俩方法在你这个类里没用,但其他类需要用是另一回事,不影响当前类必须遵守的接口实现规则。
要是嫌空代码看着冗余,给你两个优化思路:
- 给接口方法加默认实现:修改
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
相关产品推荐
相关产品推荐

