Java 9 и приватные методы в интерфейсах

Я как-то уже писал статьи о том, что нового добавилось в Java 9. Но тогда я упустил один важный момент: начиная с девятой версии Java, в интерфейсах можно описывать приватные методы. Учитывая, что с Java 8 в интерфейсах появились default-методы, то получаем довольно сильную функциональность на текущий момент. Ещё переменные экземпляров добавить и будет совсем как в полноценных классах.

Для чего же нам в интерфейсах методы с модификатором private? В чём их смысл? Поскольку в дочерних методах и классах, реализующих этот интерфейс, эти методы не будут доступны, то единственное, для чего их можно использовать, так это как вспомогательные методы для default-методов. А точнее говоря, для тех кусков кода, которые повторяются, но которые нежелательно описывать в default-методах, так как они не нужны в дочерних интерфейсах, а тем более не нужны в классах, которые будут реализовывать наш интерфейс.

Пример:

Теперь класс Daemon, реализующий наш интерфейс. В этом классе доступен метод calculateHit(int damage) из интерфейса, но недоступен метод calculateHit(int damage, int armor), так как он имеет модификатор private. Имя метода и параметры здесь не имеют значения для видимости, они могут быть любыми. Важно то, что модификатор private. Сам класс Daemon:

Пример использования класса Daemon:

Честно говоря, довольно спорное нововведение. Как-то сильно отходит от общепринятого понятия интерфейсов в других языках, или я чего-то недопонимаю. На мой взгляд, интерфейс на то и интерфейс, чтобы только описывать контракт, а не содержать куски кода.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *