为了账号安全,请及时绑定邮箱和手机立即绑定

如何避免实现所有方法

如何避免实现所有方法

倚天杖 2023-01-05 10:15:02
我正在为我在很多类中使用的回调使用一个接口,所以当我实现这个回调时,我需要覆盖所有方法,但我只使用了类中的 1 或 2 个。我怎样才能避免这种情况?这是回调:public interface DatabaseCallback {    void onContactPhotoSaved();    void onContactPhotoUpdated();    void onContactPhotoDeleted();    void onContactPhotoFounded(ContactInfo item);    void onDataNotAvailable();    void onErrorDuringProcess();    void onContactPhotoLoaded(List<ContactInfo> users);}编辑:这个有可能??public class DatabaseManagerCallback {public interface ContactInfoInsertCallback{    void onContactPhotoSaved();    void onErrorOcurred();}public interface ContactInfoUpdateCallback{    void onContactPhotoUpdated();    void onErrorOcurred();}public interface ContactInfoDeleteCallback{    void onContactPhotoDeleted();    void onErrorOcurred();}public interface ContactInfoFoundedCallback{    void onContactPhotoFounded(ContactInfo item);    void onErrorOcurred();}}
查看完整描述

4 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

编写一个实现所有功能但每个功能都为空的类。然后从中扩展您的类,以便它们继承空主体函数。

如果您是接口类的所有者,您还可以考虑为他们提供一个默认的不执行任何操作的实现。但是,如果它是一个库类,那是行不通的。


查看完整回答
反对 回复 2023-01-05
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

您可以在接口中添加默认实现,这样您就不需要重写所有方法:


public interface DatabaseCallback {


    default void onContactPhotoSaved() {}


    default void onContactPhotoUpdated() {}


    default void onContactPhotoDeleted() {}


    default void onContactPhotoFounded(ContactInfo item) {}


    default void onDataNotAvailable() {}


    default void onErrorDuringProcess() {}


    default void onContactPhotoLoaded(List<ContactInfo> users) {}


}

如果需要,这将允许您使用您的实现扩展另一个类。


如果接口来自库并且您无法修改它,则可以创建一个中间接口来扩展第一个接口并添加默认实现。然后你实现你的接口。


public interface MyDatabaseCallback extends DatabaseCallback {


    @Override default void onContactPhotoSaved() {}


    @Override default void onContactPhotoUpdated() {}


    @Override default void onContactPhotoDeleted() {}


    @Override default void onContactPhotoFounded(ContactInfo item) {}


    @Override default void onDataNotAvailable() {}


    @Override default void onErrorDuringProcess() {}


    @Override default void onContactPhotoLoaded(List<ContactInfo> users) {}


}


查看完整回答
反对 回复 2023-01-05
?
波斯汪

TA贡献1811条经验 获得超4个赞

使用 Java 语言的接口实现只能做两件事:

  • 实施所有方法(如您所说)。

  • 只实现几个方法并声明类抽象(因此,你不能实例化它)。

根据您想要执行的操作,您可以创建一个类来实现具有某种默认行为的所有方法,然后重写您需要在每种情况下定义的方法。


查看完整回答
反对 回复 2023-01-05
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

您可以创建一个实现所有方法的类,然后从它继承:



public class MyDatabaseCallback implements DatabaseCallback{


    @Override void onContactPhotoSaved(){}


    @Override void onContactPhotoUpdated(){}


    @Override void onContactPhotoDeleted(){}


    @Override void onContactPhotoFounded(ContactInfo item){}


    @Override void onDataNotAvailable(){}


    @Override void onErrorDuringProcess(){}


    @Override void onContactPhotoLoaded(List<ContactInfo> users){}


}

现在,您所要做的就是继承自MyDatabaseCallback:


public class MyCustomDatabaseCallback extends MyDatabaseCallback {

    @Override void onDataNotAvailable(){

        // TODO

    }

}


查看完整回答
反对 回复 2023-01-05
  • 4 回答
  • 0 关注
  • 147 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信