Comenzando con Java 8, los default
métodos se introdujeron en las interfaces. Efectivamente, esto significa que no todos los métodos en un interface
son abstract
.
Comenzando con Java 9 (tal vez), private
se permitirán métodos. Esto significa que no todos los métodos en un interface
son public abstract
.
La pregunta "¿Deberían declararse los métodos en una interfaz Java con o sin el public
modificador de acceso?" se le preguntó en Stack Overflow en /programming/161633/should-methods-in-a-java-interface-be-declared-with-or-without-a-public-access-m
Allí, la mayoría de las respuestas argumentaron que public abstract
no debería usarse porque ningún método en un interface
puede ser otro que no sea public abstract
. Ese ya no es el caso.
Entonces, a la luz de estas nuevas características de las interfaces, ¿deberían public abstract
usarse las palabras clave en una declaración de método de interfaz Java?
En mi entorno específico, tendremos personas que son ingenieros de software con experiencia, pero que no tienen experiencia en Java, que leen código Java de vez en cuando. Siento que omitir las public abstract
palabras clave ahora creará un punto adicional de confusión para aquellos que no están familiarizados con el historial de cómo las interfaces llegaron a tener diferentes reglas para usar estas palabras clave.
abstract
está volviendo cada vez más complicada. En Java 9, esa misma oración podría ser: "Un método de interfaz que carece de un default
modificador o un static
modificador o un private
modificador es implícitamente abstracto ..." Además, los argumentos auxiliares para no usar explícitamente las palabras clave, a saber, que todos los métodos de interfaz son public abstract
, ahora son discutibles.
stream
to java.util.Collection
, o Map.getOrDefault()
. ¡La alternativa es crear una nueva subinterfaz y hacer que todos se depriman, como Graphics2D, y nadie lo disfrutó!
default
modificador o unstatic
modificador es implícitamenteabstract
... Está permitido, pero desaconsejado como cuestión de estilo, especificar redundantemente elabstract
modificador para tal declaración de método ". ¿Por qué esperas que las cosas cambien?