Java SE 9正慢慢走向终点, 其中一个新特性是接口上的私有方法。
Java 9中接口上的私有方法
在Java 7和所有早期版本中,接口很简单,它们只能包含公共抽象方法。
从Java 8开始,你可以拥有公共静态方法和公共默认方法:
public interface HolidayCalendar {
// static method, to get the calendar by identifier
public static HolidayCalendar of(String id) {
return Util.holidayCalendar(id);
}
// abstract method, to find if the date is a holiday
public abstract boolean isHoliday(LocalDate date);
// default method, using isHoliday()
public default boolean isBusinessDay(LocalDate date) {
return !isHoliday(date);
}
}
请注意,我选择使用完整的声明,在所有三个方法上都使用 "public",尽管这不是必须的。 我认为这是Java SE 8的最佳实践,因为它使代码更加清晰(现在有三种类型的方法),并为将来出现非公共方法做好准备。
而这个时间很快就到了,因为Java 9正在接口上增加私有方法:
public interface HolidayCalendar {
// example of a private interface method
private void validateDate(LocalDate date) {
if (date.isBefore(LocalDate.of(1970, 1, 1))) {
throw new IllegalArgumentException();
}
}
}
因此,方法可以是公共的或私有的(如果没有指定,默认为公共的)。 私有方法可以是静态的或实例的。 在这两种情况下,私有方法不会被子接口或实现继承, Java 9中有效的修饰语组合如下;
- public static- 支持
- public abstract- 支持
- public default- 支持
- 私有静态--支持
- 私有抽象- 编译错误
- 私有默认- 编译错误
- 私有- 支持
接口上的私有方法对于完善Java 8中增加的功能将非常有用。