4 回答

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超10個(gè)贊
編寫(xiě)一個(gè)實(shí)現(xiàn)所有功能但每個(gè)功能都為空的類(lèi)。然后從中擴(kuò)展您的類(lèi),以便它們繼承空主體函數(shù)。
如果您是接口類(lèi)的所有者,您還可以考慮為他們提供一個(gè)默認(rèn)的不執(zhí)行任何操作的實(shí)現(xiàn)。但是,如果它是一個(gè)庫(kù)類(lèi),那是行不通的。

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超10個(gè)贊
您可以在接口中添加默認(rèn)實(shí)現(xiàn),這樣您就不需要重寫(xiě)所有方法:
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) {}
}
如果需要,這將允許您使用您的實(shí)現(xiàn)擴(kuò)展另一個(gè)類(lèi)。
如果接口來(lái)自庫(kù)并且您無(wú)法修改它,則可以創(chuàng)建一個(gè)中間接口來(lái)擴(kuò)展第一個(gè)接口并添加默認(rèn)實(shí)現(xiàn)。然后你實(shí)現(xiàn)你的接口。
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) {}
}

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超4個(gè)贊
使用 Java 語(yǔ)言的接口實(shí)現(xiàn)只能做兩件事:
實(shí)施所有方法(如您所說(shuō))。
只實(shí)現(xiàn)幾個(gè)方法并聲明類(lèi)抽象(因此,你不能實(shí)例化它)。
根據(jù)您想要執(zhí)行的操作,您可以創(chuàng)建一個(gè)類(lèi)來(lái)實(shí)現(xiàn)具有某種默認(rèn)行為的所有方法,然后重寫(xiě)您需要在每種情況下定義的方法。

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超6個(gè)贊
您可以創(chuàng)建一個(gè)實(shí)現(xiàn)所有方法的類(lèi),然后從它繼承:
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){}
}
現(xiàn)在,您所要做的就是繼承自MyDatabaseCallback:
public class MyCustomDatabaseCallback extends MyDatabaseCallback {
@Override void onDataNotAvailable(){
// TODO
}
}
添加回答
舉報(bào)