如何避免实施所有方法

时间:2019-06-05 15:35:54

标签: java interface

我在很多类中使用了一个接口作为回调,因此在实现此回调时,我需要重写所有方法,但是我只使用了类中的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 个答案:

答案 0 :(得分:2)

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

如果您是接口类的所有者,则还可以考虑为它们提供默认的“不执行任何操作”。但是,如果它的库类无法正常工作。

答案 1 :(得分:0)

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

  • 实施所有方法(如您所说)。
  • 仅实现一些方法并声明类抽象(因此,您不能实例化它)。

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

答案 2 :(得分:0)

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


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
    }
}

答案 3 :(得分:0)

您可以在界面中添加默认实现,因此您无需覆盖所有方法:

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) {}

}