Anwendungsbeispiel für Java Enum

Als ich zuvor Java für die Arbeit verwendet habe, gab es einen Prozess, der schwer zu verstehen war, deshalb habe ich ihn überarbeitet.

Vor dem Refactoring

Es war so vor dem Refactoring.


   private void doProcess() {
      A a = initial(); 
      if (!chkfnc1(a)) {
        throw new XXXException(x1);
      }

      if (!chkfnc2(a)) {
        throw new XXXException(x2);         
      }
      
      if (!chkfnc3(a)) {
        throw new XXXException(x3);         
      }
      
      
     execute(a); //Ausführungsverarbeitung nach Prüfung
     
   }

  private boolean chkfnc1(a) {}
  private boolean chkfnc2(a) {}
  private boolean chkfnc3(a) {}
  

Instanz abrufen-> Instanzauthentizität prüfen (n-mal) -> Ausführungsprozess Es ist ein Fluss.

Angenommen, chkfncN fließt in einer Sequenz und hat eine Ordnungsabhängigkeit.

Wenn diese Situation anhält und sich die Prüfanforderung um eins erhöht, ist es schwierig zu bestimmen, wann die Funktion "chkfncN" geprüft wird, und es ist widerlich.

Enum Wenn ich Enum höre,

Und so weiter. Ich denke, das größte Merkmal, das ich denke, ist, dass die Bestellung garantiert ist.

Ebenfalls Teil der Definition von Haskells Typklasse Enum


class Enum a where
 succ :: a -> a --Funktion mit folgenden Werten
 pred :: a -> a --Funktion, die den vorherigen Wert anzeigt

Ist definiert.

Auch in Java Enum

  
for (DaysOfWeekEnum day : DaysOfWeekEnum.values()) {
}

Es kann in dieser Reihenfolge verarbeitet werden

Funktionen in Javas Enum

Java Enum ** Funktionen können in Enum ** definiert werden https://qiita.com/KeithYokoma/items/9681b130ea132cfad64d

kombinieren

Basierend auf dem oben Gesagten können Sie dies tun.


public enum MyChecker {
    CHK1 {
        @Override
        public boolean chkfnc(A a) {}
        @Override
        public String erroMsg(){}
    },
    CHK2 {
        @Override
        public boolean chkfnc(A a) {}
        @Override
        public String erroMsg(){}
    };
    CHK3 {
        @Override
        public boolean chkfnc(A a) {}
        @Override
        public String erroMsg(){}
    };
    public abstract boolean chkfnc(A a);
    public abstract String errorMsg;
}

Verwenden Sie das vorherige Beispiel


private void doProcess() {
  A a = initial();
  for (MyChecker val : MyChecker.values()) {
     if (!val.chefnc) {
       throw new XXXException(val.erroMsg);
     }
  }
}

Das Innere von doProcess wurde aktualisiert und die Ansicht wurde besser. Da die Bestellung durch die Verwendung von Enum garantiert wird, ist es fast so, als ob Sie den Betrieb garantieren möchten.

Zusammenfassung

Es gab nicht viele Artikel, in denen Enums Valies in Java so verwendet wurden, also habe ich es geschrieben. Die Situation, in der es verwendet werden kann, ist begrenzt, aber wenn Sie erkennen, dass enum die Reihenfolge garantiert, denke ich, dass auch andere Anwendungen funktionieren werden.

Recommended Posts

Anwendungsbeispiel für Java Enum
[Java] enum (Aufzählungstyp)
Enum Reverse Map Java
Java Servlet LifeCycle-Beispiel
[Java] JUnit4-Testfallbeispiel
Enum Strategiemuster in Java
Reproduzieren Sie die Java-Enumeration in C #
[Java] Verzweigungsaufzählung mit switch-Anweisung
Beispiel für Codierung und Decodierung in Java
Java
[Java] Reduzieren Sie if-Anweisungen mit Enum
So formatieren Sie Enum mit dem Formatierer-Maven-Plugin (Java)
[Kotlin] Ein Beispiel für die Verarbeitung mit Enum
Java
Verwendung des Java-Aufzählungstyps
[Java] Express-Aufzählungstyp ohne Verwendung des Aufzählungstyps (Aufzählung)
Parallelitätsmethode in Java mit grundlegendem Beispiel
Machen Sie so etwas wie Javas Enum mit Typescript
Suchen Sie Java Enum nach einem anderen Element