A partir do Java 8, os default
métodos foram introduzidos nas interfaces. Efetivamente, isso significa que nem todos os métodos em um interface
são abstract
.
A partir do Java 9 (talvez), os private
métodos serão permitidos. Isso significa que nem todos os métodos em um interface
são public abstract
.
A pergunta "Os métodos em uma interface Java devem ser declarados com ou sem o public
modificador de acesso?" foi solicitado no Stack Overflow em /programming/161633/should-methods-in-a-java-interface-be-declared-with-or-without-a-public-access-m
Lá, a maioria das respostas argumentou que public abstract
não deveria ser usado porque nenhum método em um interface
pode ser outra coisa senão public abstract
. Esse não é mais o caso.
Portanto, à luz desses novos recursos de interfaces, as public abstract
palavras - chave devem ser usadas em uma declaração de método de interface Java?
No meu ambiente específico, teremos pessoas que são engenheiros de software experientes, mas não experientes em Java, lendo o código Java de tempos em tempos. Sinto que deixar de fora as public abstract
palavras - chave criará um ponto de confusão adicional para aqueles que não estão familiarizados com o histórico de como as interfaces passaram a ter regras diferentes para o uso dessas palavras-chave.
abstract
está se tornando cada vez mais complicada. Em Java 9, a mesma frase poderia ser: "Um método de interface sem um default
modificador ou um static
modificador ou um private
modificador é implicitamente abstract ..." Além disso, os argumentos auxiliares para não usar explicitamente as palavras-chave, ou seja, que todos os métodos de interface são public abstract
, agora são discutíveis.
stream
a java.util.Collection
ou Map.getOrDefault()
. Alternativa é criar uma nova sub-interface, e fazer com que todo mundo faça downcast, como o Graphics2D, e ninguém gostou disso!
default
modificador oustatic
modificador é implicitamenteabstract
... É permitido, mas desencorajado por uma questão de estilo, a especificar redundantemente oabstract
modificador para uma declaração desse método ". Por que você espera que as coisas mudem?