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);
   
}

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

try预期interface的所有用途,并从一开始就完全指定它。如果要向interface添加其他方法,则有几种选择。您可以创建一个扩展DoItDoItPlusinterface:

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的类的用户不必修改或重新编译它们即可容纳其他方法。