多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
### [接口中的静态方法](https://lingcoder.gitee.io/onjava8/#/book/10-Interfaces?id=%e6%8e%a5%e5%8f%a3%e4%b8%ad%e7%9a%84%e9%9d%99%e6%80%81%e6%96%b9%e6%b3%95) Java 8 允许在接口中添加静态方法。这么做能恰当地把工具功能置于接口中,从而操作接口,或者成为通用的工具: ~~~ // onjava/Operations.java package onjava; import java.util.*; public interface Operations { void execute(); static void runOps(Operations... ops) { for (Operations op: ops) { op.execute(); } } static void show(String msg) { System.out.println(msg); } } ~~~ 这是模版方法设计模式的一个版本(在“设计模式”一章中详细描述),`runOps()`是一个模版方法。`runOps()`使用可变参数列表,因而我们可以传入任意多的**Operation**参数并按顺序运行它们: ~~~ // interface/Machine.java import java.util.*; import onjava.Operations; class Bing implements Operations { @Override public void execute() { Operations.show("Bing"); } } class Crack implements Operations { @Override public void execute() { Operations.show("Crack"); } } class Twist implements Operations { @Override public void execute() { Operations.show("Twist"); } } public class Machine { public static void main(String[] args) { Operations.runOps( new Bing(), new Crack(), new Twist()); } } ~~~ 输出: ~~~ Bing Crack Twist ~~~ 这里展示了创建**Operations**的不同方式:一个外部类(Bing),一个匿名类,一个方法引用和 lambda 表达式——毫无疑问用在这里是最好的解决方法。 这个特性是一项改善,因为它允许把静态方法放在更合适的地方。