Ora che non tutte le dichiarazioni di metodo in una interfaccia Java sono pubbliche in astratto, i metodi dovrebbero essere dichiarati con questi modificatori?

14

A partire da Java 8, i metodi default sono stati introdotti nelle interfacce. In pratica, questo significa che non tutti i metodi in interface sono abstract .

A partire da Java 9 (forse), saranno consentiti i metodi private . Ciò significa che non tutti i metodi in interface sono public abstract .

La domanda "I metodi in un'interfaccia Java devono essere dichiarati con o senza il modificatore di accesso public ?" è stato chiesto a Stack Overflow a link

Lì, la maggior parte delle risposte ha sostenuto che public abstract non dovrebbe essere utilizzato perché nessun metodo in interface può essere diverso da public abstract . Questo non è più il caso.

Quindi, alla luce di queste nuove funzionalità delle interfacce, le parole chiave public abstract devono essere utilizzate in una dichiarazione del metodo di interfaccia Java?

Nel mio ambiente specifico, avremo persone con esperienza in ingegneri del software, ma non esperte in Java, che leggono il codice Java di volta in volta. Ritengo che ignorando le parole chiave public abstract creeremo ora un ulteriore punto di confusione per coloro che non hanno familiarità con la cronologia di come le interfacce hanno avuto regole diverse per l'utilizzo di queste parole chiave.

    
posta David Campbell 03.08.2016 - 01:47
fonte

2 risposte

2

Per espandere la risposta StackOverflow:

  1. Il modificatore di accesso public non è necessario perché

    Every method declaration in the body of an interface is implicitly public (§6.6). It is permitted, but discouraged as a matter of style, to redundantly specify the public modifier for a method declaration in an interface. (Section 9.4)

  2. Il modificatore di accesso abstract non è necessario perché

    A default method is a method that is declared in an interface with the default modifier; its body is always represented by a block.

    E ...

    An interface method lacking a default modifier or a static modifier is implicitly abstract, so its body is represented by a semicolon, not a block.

Dato che i metodi predefiniti hanno un corpo e quelli che non sono intrinsecamente astratti e ogni dichiarazione di metodo su un'interfaccia è intrinsecamente pubblica, non è necessario specificare nessuna parola chiave.

Uno dei commenti su una risposta ha detto:

Don't make them think! I always added public abstract before, despite the style police, cause it made things clear and reminded the reader. Now I am vindicated because Java 8 and 9 complicate things (user949300)

Un commento sulla domanda StackOverflow (revocato 18 volte) confuta questo:

It's bad because writing it as public implies that it can be non-public (Pacerier)

Le implicazioni del codice, in particolare le interfacce, sono importanti.

    
risposta data 31.01.2017 - 19:15
fonte
1

Non è sufficiente la mancanza di un'implicazione di un blocco di istruzioni? Dichiareresti extends Object anche se è implicito?

Se lo sviluppatore non capisce la ridondanza, è probabile che potrebbero non comprendere appieno il concetto alla base della funzione linguistica , che è un problema ancora più grande che essere confusi su modificatori.

Lo sviluppatore deve capire che lo scopo di un'interfaccia è creare un contratto che definisce in che modo un client può interagire con un oggetto. Ciò suggerisce che qualsiasi metodo in un'interfaccia utilizzata per l'interazione tra oggetti dovrebbe essere esposto ai clienti.

Se dichiari un metodo privato, dichiari esplicitamente che il metodo non è destinato a essere chiamato dai client, il che nel caso delle interfacce è qualcosa che non può essere facilmente dedotto.

    
risposta data 02.11.2016 - 17:36
fonte

Leggi altre domande sui tag