A partire da Java 8, i defaultmetodi sono stati introdotti nelle interfacce. In effetti, ciò significa che non tutti i metodi in uno interfacesono abstract.
A partire da Java 9 (forse), i privatemetodi saranno consentiti. Ciò significa che non tutti i metodi in un interfacesono public abstract.
La domanda "I metodi in un'interfaccia Java devono essere dichiarati con o senza il publicmodificatore 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 abstractnon dovrebbe essere usato perché nessun metodo in interfacepuò essere altro public abstract. Questo non è più il caso.
Quindi, alla luce di queste nuove funzionalità delle interfacce, le public abstractparole 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 abstractparole 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.
abstractstanno diventando sempre più contorte. In Java 9, la stessa frase potrebbe essere "Un metodo di interfaccia privo di un defaultmodificatore o di un staticmodificatore o di un privatemodificatore è 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.
streama java.util.Collection, o Map.getOrDefault(). L'alternativa è creare una nuova sotto-interfaccia e far abbattere tutti, come Graphics2D, e nessuno è piaciuto!
defaultmodificatore o di unstaticmodificatore è implicitamenteabstract... È consentito, ma scoraggiato dal punto di vista stilistico, specificare ridondante ilabstractmodificatore per tale dichiarazione di metodo ". Perché pensi che le cose dovrebbero cambiare?