A partire da Java 8, i default
metodi sono stati introdotti nelle interfacce. In effetti, ciò significa che non tutti i metodi in uno interface
sono abstract
.
A partire da Java 9 (forse), i private
metodi saranno consentiti. Ciò significa che non tutti i metodi in un interface
sono public abstract
.
La domanda "I metodi in un'interfaccia Java devono essere dichiarati con o senza il public
modificatore di accesso?" è stato chiesto a Stack Overflow all'indirizzo /programming/161633/should-methods-in-a-java-interface-be-declared-with-or-without-a-public-access-m
Lì, la maggior parte delle risposte ha sostenuto che public abstract
non dovrebbe essere usato perché nessun metodo in interface
può essere altro public abstract
. Questo non è più il caso.
Quindi, alla luce di queste nuove funzionalità delle interfacce, le public abstract
parole chiave dovrebbero essere utilizzate in una dichiarazione del metodo dell'interfaccia Java?
Nel mio ambiente specifico, avremo persone che sono ingegneri del software esperti, ma non esperti in Java, che leggono di tanto in tanto il codice Java. Ritengo che tralasciando le public abstract
parole chiave creerà ora un ulteriore punto di confusione per coloro che non hanno familiarità con la storia di come le interfacce arrivarono ad avere regole diverse per l'uso di queste parole chiave.
abstract
stanno diventando sempre più contorte. In Java 9, la stessa frase potrebbe essere "Un metodo di interfaccia privo di un default
modificatore o di un static
modificatore o di un private
modificatore è implicitamente astratto ..." Inoltre, gli argomenti ausiliari per non usare esplicitamente le parole chiave, vale a dire che tutti i metodi di interfaccia sono public abstract
, sono ora discutibili.
stream
a java.util.Collection
, o Map.getOrDefault()
. L'alternativa è creare una nuova sotto-interfaccia e far abbattere tutti, come Graphics2D, e nessuno è piaciuto!
default
modificatore o di unstatic
modificatore è implicitamenteabstract
... È consentito, ma scoraggiato dal punto di vista stilistico, specificare ridondante ilabstract
modificatore per tale dichiarazione di metodo ". Perché pensi che le cose dovrebbero cambiare?