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