不断发展的接口

考虑一下你开发的名为DoIt的接口:

public interface DoIt {
   void doSomething(int i, double x);
   int doSomethingElse(String s);
}

假设稍后你要向DoIt添加第三个方法,这样现在接口变为:

public interface DoIt {

   void doSomething(int i, double x);
   int doSomethingElse(String s);
   boolean didItWork(int i, double x, String s);
   
}

如果进行此更改,那么实现旧DoIt接口的所有类都将中断,因为它们不再实现旧接口,依赖此接口的程序员将大声抗议。

尝试预测接口的所有用途,并从一开始就完全指定它,如果要向接口添加其他方法,可以使用多个选项,你可以创建一个扩展DoItDoItPlus接口:

public interface DoItPlus extends DoIt {

   boolean didItWork(int i, double x, String s);
   
}

现在,你的代码用户可以选择继续使用旧接口或升级到新接口。

或者,你可以将新方法定义为默认方法,以下示例定义名为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 
   }
   
}

请注意,你必须提供默认方法的实现,你还可以为现有接口定义新的静态方法,具有实现使用新的默认或静态方法增强的接口的类的用户不必修改或重新编译它们以适应额外方法。


上一篇:将接口用作类型
下一篇:默认方法

博弈
2.5k 声望1.5k 粉丝

态度决定一切