5.1.4、接口进化

这篇Java教程基于JDK1.8。教程中的示例和实践不会使用未来发行版中的优化建议。
接口进化

假设你开发了一个叫做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接口的所有类都将中断,因为它们不再实现旧接口。依赖这个接口的程序员会大声抗议。

尝试从一开始就预料到接口的所有用途,并完全指定它。如果你想在接口中添加方法,有几种办法。可以创建一个DoItPlus 接口继承自Dolt

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

注意你必须为默认方法提供一个实现。你也可以在现有接口定义新的静态方法。对于那些使用新的默认方法或静态方法增强接口的类用户而言,不必修改或重新编译它们来适应添加的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值