接口的进化史
版本 | 特性 |
---|---|
Before Java 8 | - 所有方法自动为 public - 所有属性自动为 public static final |
Java 8 | - 允许 static 方法- 新增 default 方法 |
Java 9 | - 允许 private 方法 |
属性和方法不带修饰符
由于接口中的方法自动为 public
,属性自动为 public static final
,所以《阿里巴巴 Java 开发手册》推荐接口中的方法和属性不加任何修饰符,保持代码的简洁性,并加上有效的 Javadoc 注释。
static 方法
从 Java 8 开始,接口中允许包含 static
方法。
在 Java 标准库中,你可以发现许多像 Collection / Collections
、 Path / Paths
一样的“接口-工具类”对。因为接口中允许添加 static
方法,所以可以将工具类中的静态方法移动到接口中。如在 Paths
类中提供了以下方法:
// Paths
public static Path get(URI uri) {...}
public static Path get(String first, String... more) {...}
但在 Java 11 中, Path
接口直接增加了两个等效的静态方法:
// since Java 11, Path interface
public static Path of(URI uri) {...}
public static Path of(String first, String... more) {...}
这可能使得在我们在未来不再需要像 Paths
一样的工具类。
private 方法
从 Java 9 开始,接口中允许存在 private
方法,该方法既可以是 static
方法,也可以是一个实例方法(instance method)。