Java 9中接口上的私有方法

89 阅读1分钟

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中增加的功能将非常有用。