¿Por qué no está permitido "final" en los métodos de interfaz Java 8?

Una de las características más útiles de Java 8 son las nuevasdefault métodos en interfaces. Básicamente, hay dos razones (puede haber otras) por las que se han introducido:

Proporcionar implementaciones predeterminadas reales. Ejemplo:Iterator.remove()Permitiendo la evolución de la API JDK. Ejemplo:Iterable.forEach()

Desde la perspectiva de un diseñador de API, me hubiera gustado poder usar otros modificadores en los métodos de interfaz, p.final. Esto sería útil al agregar métodos de conveniencia, evitando anulaciones "accidentales" en la implementación de clases:

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);
}

Lo anterior ya es una práctica común siSender fueron una clase:

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);
}

Ahora,default yfinal obviamente son palabras clave contradictorias, pero la palabra clave predeterminada en sí mismano habría sido estrictamente requerido, así que supongo que esta contradicción es deliberada, para reflejar las sutiles diferencias entre"métodos de clase con cuerpo" (solo métodos) y"métodos de interfaz con cuerpo" (métodos predeterminados), es decir, diferencias que aún no he entendido.

En algún momento, soporte para modificadores comostatic yfinal en los métodos de interfaz aún no se ha explorado por completo,citando a Brian Goetz:

La otra parte es hasta dónde vamos a llegar para admitir herramientas de creación de clases en interfaces, como métodos finales, métodos privados, métodos protegidos, métodos estáticos, etc. La respuesta es: todavía no lo sabemos

Desde ese momento a finales de 2011, obviamente, el apoyo astatic Se agregaron métodos en las interfaces. Claramente, esto agregó mucho valor a las bibliotecas JDK en sí mismas, como conComparator.comparing().

Pregunta:

Cual es la razonfinal (y tambiénstatic final) nunca llegó a las interfaces Java 8?

Respuestas a la pregunta(4)

Su respuesta a la pregunta