8

Ho appena installato PMD per analizzare il mio progetto Java. Strumento davvero bello, altamente raccomandato. In ogni modo, ho avuto un paio di errori da dire:Metodo vuoto in una classe astratta

"un metodo vuoto in una classe astratta dovrebbe essere astratto invece"

ho verificato la documentazione PMD e la spiegazione dice:

in quanto sviluppatore può affidarsi a questa implementazione vuota anziché codificare quella appropriata

Quindi penso di aver compreso il motivo dietro questo errore di stile del codice, ma consideriamo il seguente scenario: Ho una classe astratta chiamata Entity. Questa classe ha un metodo booleano con implementazione predefinita. (controlla se eliminare le relative entità correlate dopo la cancellazione). Solo alcune delle classi derivate sovrascrivono questo comportamento predefinito a true.

Devo rimuovere l'implementazione predefinita e forzare tutte le classi derivate a dichiarare il loro comportamento? Pensi davvero che questo modello sia una cattiva pratica?

Chiarimento: PMD tratta un metodo con estratto conto singolo come vuoto.

risposta

9

Penso che sia solo una linea guida. Ti dice che potresti voler riconsiderare il tuo design, ma se il tuo design ha già perfettamente senso, non c'è motivo di obbedire a un software al posto del tuo cervello.

0

Quando il metodo ha un'implementazione predefinita, non è vuoto? O mi manca qualcosa?

Per me, un metodo vuoto si presenta così:

public void EmptyMethod() 
{} 
+5

bene, PMD tratta di un metodo che restituisce solo booleano o null come vuoto troppo – LiorH

0

Se siete su Java 1.8, è possibile effettuare un Entity un'interfaccia invece di una classe astratta e scrivere un implementazione predefinita per il metodo in essa.

public interface Entity { 
    default boolean yourMethod() { 
     //default implementation ... 
    } 
} 

È possibile utilizzare questo per riferimento: https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html

Problemi correlati