代码对比
✕ Java 8
interface Logger {
default void logInfo(String msg) {
System.out.println(
"[INFO] " + timestamp() + msg);
}
default void logWarn(String msg) {
System.out.println(
"[WARN] " + timestamp() + msg);
}
}
✓ Java 9+
interface Logger {
private String format(String lvl, String msg) {
return "[" + lvl + "] " + timestamp() + msg;
}
default void logInfo(String msg) {
IO.println(format("INFO", msg));
}
default void logWarn(String msg) {
IO.println(format("WARN", msg));
}
}
发现此代码有问题? 告诉我们。
为什么现代方式更好
代码复用
在默认方法之间共享逻辑,避免重复。
封装
实现细节对实现类保持隐藏。
DRY 接口
不再需要在默认方法之间复制粘贴。
旧方式
重复逻辑
现代方式
私有方法
自 JDK
9
难度
中级
JDK 支持
接口私有方法
可用
自 JDK 9 起广泛可用(2017 年 9 月)
工作原理
Java 9 允许在接口中使用私有方法,使您可以在默认方法之间共享代码,而不向实现类暴露实现细节。
相关文档