Evolving Interfaces
考虑一下您开发的名为DoIt
的interface:
public interface DoIt {
void doSomething(int i, double x);
int doSomethingElse(String s);
}
假设稍后您想向DoIt
添加第三个方法,以使interface现在变为:
public interface DoIt {
void doSomething(int i, double x);
int doSomethingElse(String s);
boolean didItWork(int i, double x, String s);
}
如果进行此更改,则实现旧DoIt
interface的所有类都将中断,因为它们不再实现旧interface。依赖此interface的程序员将大声抗议。
try预期interface的所有用途,并从一开始就完全指定它。如果要向interface添加其他方法,则有几种选择。您可以创建一个扩展DoIt
的DoItPlus
interface:
public interface DoItPlus extends DoIt {
boolean didItWork(int i, double x, String s);
}
现在,您的代码用户可以选择 continue 使用旧interface或升级到新interface。
另外,您可以将新方法定义为default methods。以下示例定义了一个名为didItWork
的默认方法:
public interface DoIt {
void doSomething(int i, double x);
int doSomethingElse(String s);
default boolean didItWork(int i, double x, String s) {
// Method body
}
}
请注意,您必须提供默认方法的实现。您还可以为现有interface定义新的static methods。具有实现用新的默认方法或静态方法增强的interface的类的用户不必修改或重新编译它们即可容纳其他方法。