[Java] Réduire les instructions if avec Enum

introduction

On dit souvent que 80% du temps passé à lire le code source en touchant un programme pendant la maintenance et le développement. Par conséquent, vous devez toujours être conscient du code source hautement lisible et maintenable, mais lorsqu'il s'agit de systèmes d'entreprise, il existe inévitablement de nombreuses branches conditionnelles en fonction du type de contrat, du type de partenaire commercial, etc. J'ai l'impression que ça a tendance à l'être. Donc, j'ai appris qu'il existe une méthode utilisant Enum comme l'une des méthodes pour réduire les instructions if, donc je la posterai pour ne pas l'oublier.

Avantages de réduire les déclarations if

S'il existe de nombreuses branches conditionnelles par l'instruction if, l'utilisation de Enum facilite la lecture.

Exemple concret

SampleEnum.java


public enum SampleEnum {

	kind1(new Kind1()),
	kind2(new Kind2()),
	kind3(new Kind3()),
	kind4(new Kind4());

	SuperKind kind;

	private SampleEnum(SuperKind kind) {
		this.kind = kind;
	}

	public void execute(Object obj) {
		kind.execute(obj);
	}
}

Tout d'abord, préparez Enum. Ensuite, pour chaque propriété, décrivez la classe de traitement que vous souhaitez exécuter et définissez le constructeur. Enfin, définissez la méthode d'exécution de la classe de traitement que vous souhaitez exécuter.

Enum lui-même est implémenté dans ces 3 étapes. Après cela, si un type est ajouté, ajoutez simplement une propriété et décrivez la classe de traitement que vous souhaitez exécuter pour chaque type.

Kind1.java


public class Kind1 implements SuperKind {

	public void execute(Object obj){

		if(!(obj instanceof String)) {
			System.out.println("Veuillez spécifier une chaîne de caractères comme argument");
		}
		System.out.println("En classe Kind1" + obj);
	}
}

La classe de traitement que vous souhaitez exécuter. Pour l'instant, sortons facilement une instruction sur la console qui nous indique qu'elle a été exécutée dans cette classe. SuperKind est une interface. Puisque le contenu ne définit ici que la méthode ʻexecute`, je vais l'omettre.

Main.java


public class Main {

	public static void main(String[] args) {

		SampleEnum test1 = SampleEnum.valueOf("kind1");
		SampleEnum test2 = SampleEnum.valueOf("kind2");
		SampleEnum test3 = SampleEnum.valueOf("kind3");
		SampleEnum test4 = SampleEnum.valueOf("kind4");

		String string = "Test d'énumération";

		test1.execute(string);
		test2.execute(string);
		test3.execute(string);
		test4.execute(string);
	}
}

C'est la classe principale. Le résultat de l'exécution ici est le suivant.

Tester Enum dans la classe Kind1
Tester Enum dans la classe Kind2
Tester Enum dans la classe Kind3
Tester Enum dans la classe Kind4

finalement

En implémentant ce type d'implémentation, j'ai senti que la plage d'utilisation était large, par exemple en réduisant les jugements d'instruction if dans la classe Factory et en réduisant les jugements d'instruction if tels que le processus de logique métier à appeler.

Recommended Posts

[Java] Réduire les instructions if avec Enum
Instructions Java if et switch
[Java] Énumération des branches avec instruction switch
[Java] enum (type d'énumération)
Installez java avec Homebrew
Changer de siège avec Java
Installez Java avec Ansible
Téléchargement confortable avec JAVA
Changer java avec direnv
Enum Reverse Map Java
Implémentez rapidement singleton avec enum en Java
Sortie true avec if (a == 1 && a == 2 && a == 3) en Java (identifiant invisible)
Téléchargement Java avec Ansible
Raclons avec Java! !!
Construire Java avec Wercker
Conversion Endian avec JAVA
(Java) BDD facile avec Spectrum?
Utiliser des couches Lambda avec Java
Créer un multi-projet Java avec Gradle
Premiers pas avec Java Collection
Configuration Java avec Spring MVC
Authentification de base avec Java 11 HttpClient
Expérimentons l'expansion en ligne Java
Exécuter un lot avec docker-compose avec Java batch
[Template] Connexion MySQL avec Java
Réécrire Java try-catch avec facultatif
Installez Java 7 avec Homebrew (cask)
[Java] Communication JSON avec jackson
Java pour jouer avec Function
Manipuler la liste avec java8StreamAPI :: reduction
Activer Java EE avec NetBeans 9
[Java] JavaConfig avec classe interne statique
À propos des instructions de déclaration de variable Java
Exploitons Excel avec Java! !!
Gestion des versions Java avec SDKMAN
Cryptage / décryptage RSA avec Java 8
Pagination de PDF avec Java + PDFBox.jar
[Java] Acquisition de contenu avec HttpCliient
Gestion des versions Java avec jenv
Dépannage avec Java Flight Recorder
Modèle de stratégie Enum en Java
Connectez-vous à DB avec Java
Connectez-vous à MySQL 8 avec Java
Erreur lors de la lecture avec java
Mémo d'étude Java 2 avec Progate
Premiers pas avec les bases de Java
[Ruby] problème avec l'instruction if
Reproduire l'énumération Java en C #
Réduisez le code redondant avec Lombok
Affichage saisonnier avec commutateur Java
Utiliser SpatiaLite avec Java / JDBC
Étudier Java avec Progate Note 1
Comparez Java 8 en option avec Swift
Analyse HTML (scraping) avec JAVA
Exécuter Java VM avec Web Assembly
Instructions Java while et for
Transition d'écran avec swing, java
Test unitaire Java avec Mockito