8

Je viens d'installer PMD pour analyser mon projet Java. Très bel outil, fortement recommandé. Quoi qu'il en soit, je me suis quelques erreurs en disant:Méthode vide dans une classe abstraite

« Une méthode vide dans une classe abstraite doit être abstraite au lieu »

Je vérifié la documentation PMD et l'explication dit:

en tant que développeur peut se baser sur cette implémentation vide plutôt que de coder l'implémentation appropriée

Donc, je pense que je comprends la raison derrière cette erreur de style de code, mais considérez le scénario suivant: J'ai une classe abstraite appelée Entité. Cette classe a une méthode booléenne avec l'implémentation par défaut. (contrôle s'il faut supprimer ses entités liées lors de la suppression). Seules quelques-unes des classes dérivées remplacent ce comportement par défaut à true. Dois-je supprimer l'implémentation par défaut et forcer toutes les classes dérivées à déclarer leur comportement? Pensez-vous vraiment que ce modèle est une mauvaise pratique?

Clarification: PMD traite une méthode avec une seule déclaration comme vide.

Répondre

9

Je pense qu'il est juste une ligne directrice. Il vous indique que vous pourriez vouloir reconsidérer votre conception, mais si votre conception est déjà parfaitement logique, il n'y a aucune raison d'obéir à un logiciel au lieu de votre cerveau.

0

Lorsque votre méthode a une implémentation par défaut, alors elle n'est pas vide? Ou est-ce que je manque quelque chose?

Pour moi, une méthode vide ressemble à ceci:

public void EmptyMethod() 
{} 
+5

, PMD traite une méthode qui renvoie uniquement booléen ou NULL comme trop vide – LiorH

0

Si vous êtes sur Java 1.8, vous pouvez faire une interface entité au lieu d'une classe abstraite et d'écrire un par défaut mise en œuvre pour la méthode en elle.

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

Vous pouvez l'utiliser pour référence: https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html

bien