Одной из наиболее полезных функций Java 8 являются новые методы default на интерфейсах. Есть по существу две причины (могут быть и другие), почему они были введены:
-  Предоставление фактических реализаций по умолчанию. Пример: Iterator.remove()
-  Разрешение на развитие JDK API. Пример: Iterable.forEach()
С точки зрения дизайнера API мне бы хотелось использовать другие модификаторы для методов интерфейса, например. final. Это было бы полезно при добавлении удобных методов, предотвращающих "случайные" переопределения при реализации классов:
interface Sender {
    // Convenience method to send an empty message
    default final void send() {
        send(null);
    }
    // Implementations should only implement this method
    void send(String message);
}
Вышеприведенная практика является обычной практикой, если Sender был классом:
abstract class Sender {
    // Convenience method to send an empty message
    final void send() {
        send(null);
    }
    // Implementations should only implement this method
    abstract void send(String message);
}
Теперь default и final явно противоречат ключевым словам, но ключевое слово по умолчанию не было бы строго обязательным, поэтому я предполагаю, что это противоречие преднамеренное, чтобы отразить тонкие различия между "методами класса с телом" (только методы) и "интерфейсные методы с телом" (методы по умолчанию), то есть различия, которые я еще не понял.
В некоторый момент времени поддержка модификаторов, таких как static и final по методам интерфейса, еще не была полностью изучена, со ссылкой на Брайана Гетца:
Другая часть - это то, как далеко мы собираемся идти на поддержку классового строительства инструменты в интерфейсах, такие как конечные методы, частные методы, защищенные методы, статические методы и т.д. Ответ: мы еще не знаем
С тех пор в конце 2011 года, очевидно, была добавлена поддержка методов static в интерфейсах. Очевидно, что это добавило большую ценность самим библиотекам JDK, таким как Comparator.comparing().
Вопрос:
В чем причина того, что final (а также static final) никогда не попадал на интерфейсы Java 8?
