我们如何决定是否为接口方法提供默认的空实现(Defender Method)?

Che*_*eng 1 java

目前,我有一个看起来像这样的界面

public interface SortInfoDialogListener {
    void onSortInfoSelected(SortInfo sortInfo);
    void onSortInfoDialogDismiss(DialogInterface dialog);
}
Run Code Online (Sandbox Code Playgroud)

由于大多数实现者对 不感兴趣onSortInfoDialogDismiss,我想知道,我应该将其作为一个空的防御者方法吗?

public interface SortInfoDialogListener {
    void onSortInfoSelected(SortInfo sortInfo);
    default void onSortInfoDialogDismiss(DialogInterface dialog) {
    }
}
Run Code Online (Sandbox Code Playgroud)

我想知道,在使接口函数具有空的防御者方法之前,我还应该考虑哪些因素?

我试图在 Effective Java 3 Item 20 和 Item 21 中找到答案。但是,仍然无法得出具体的结论。

小智 5

SOLID 原则规定根据要求隔离接口。目前我可以看到许多实现者不需要 onSortInfoDialogDismiss 方法。

尝试将 onSortInfoDialogDismiss() 提取到另一个接口,以便它可以按需实现。

单独使用 onSortInfoSelected() 保持当前界面,如下所示。

public interface SortInfoDialogListener {
    void onSortInfoSelected(SortInfo sortInfo);
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。