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

如何避免实现所有方法

如何避免实现所有方法

倚天杖 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贡献1516条经验 获得超10个赞

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

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


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

TA贡献1555条经验 获得超1个赞

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


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贡献1565条经验 获得超4个赞

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

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

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

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


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

TA贡献1578条经验 获得超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

添加回答

举报

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