[Java] Express-Aufzählungstyp ohne Verwendung des Aufzählungstyps (Aufzählung)

Einführung

In diesem Artikel werde ich den Code ausdrücken, der sich genauso verhält wie der Aufzählungstyp (Aufzählung), ohne den Aufzählungstyp zu verwenden. Der Enum-Typ von Java ist ein Typ, der mehrere Konstanten zusammenhält. Eine Reihe fester Konstanten wie Blutgruppe, Geschlecht, Monatsname, Konstellation und verschiedene Codes können basierend auf einem objektorientierten Konzept codiert werden. Darüber hinaus können Sie standardmäßig nützliche Funktionen verwenden. Dieses Mal werde ich anhand des Trump-Zeichens (Spaten, Herzen, Diamanten, Keulen) als Beispiel erklären.

Bei Verwendung des Aufzählungstyps

Suit.java


public enum Suit {
    SPADE("♠"), HEART("♡"), DIAMOND("♢"), CLUB("♣");

    private String symbol;
    
    private Suit(String symbol){
        this.symbol = symbol;
    }
    
    public String getSymbol(){
        return symbol;
    }
}

Wenn Sie den Aufzählungstyp nicht verwenden

Suit.java


public class Suit implements Comparable<Suit>{
    public static final Suit SPADE = new Suit("SPADE", "♠");
    public static final Suit HEART = new Suit("HEART", "♡");
    public static final Suit DIAMOND = new Suit("DIAMOND", "♢");
    public static final Suit CLUB = new Suit("CLUB", "♣");
    
    private static final List<Suit> VALUES =
            Collections.unmodifiableList(
                    Arrays.asList(SPADE, HEART, DIAMOND, CLUB)
            );
    private final String name;
    private final String symbol;
    
    private Suit(String name, String symbol){
        this.name = name;
        this.symbol = symbol;
    }
    
    public String getSymbol(){
        return symbol;
    }
    
    @Override
    public int compareTo(Suit t){
        return Integer.valueOf(this.ordinal()).compareTo(t.ordinal());
    }
    
    public Class<? extends Suit> getDeclaringClass(){
        return this.getClass();
    }
    
    public String name(){
        return name;
    }
    
    public int ordinal(){
        return VALUES.indexOf(this);
    }
    
    @Override
    public String toString(){
        return name();
    }
    
    public static Suit valueOf(String name){
        for(Suit value : VALUES){
            if(value.name.equals(name)) return value;
        }
        throw new IllegalArgumentException();
    }
    
    public static List<Suit> values() {
        return VALUES;
    }
}

Kommentar

Mitgliedsvariable VALUES

Der Listenteil ist so geschrieben.

private static final List<Suit> VALUES =
            Collections.unmodifiableList(
                    Arrays.asList(SPADE, HEART, DIAMOND, CLUB)
            );

In diesem Teil wird der Mitgliedsvariablen VALUES eine invariante Liste mit vier Markierungen (Anzug) als Elementen zugewiesen. Ich werde jede Funktion erklären.

  1. Die Funktion Collections.unmodizableList gibt eine invariante Liste zurück. Unveränderliche Listen können im Gegensatz zu Variablenlisten wie ArrayList ihre Werte nicht ändern.
  2. Die Funktion Arrays.asList gibt eine Liste mit Argumenten als Elementen zurück. Über diese Funktion können Sie List einen Anfangswert zuweisen. Obwohl diesmal nicht verwendet, kann die Größe (Anzahl der Elemente) der Rückgabewertliste nicht erhöht oder verringert werden. Weil diese Liste eine feste Liste ist.

Konstruktorargumente

Mit und ohne Enum-Typ

private Suit(String symbol)

Wenn unbenutzt

private Suit(String name, String symbol)

Die Argumente des Konstruktors sind unterschiedlich. Der Grund dafür ist, dass es keine Möglichkeit gibt, die Variablennamen der in der Funktion toString und der Funktion valueOf verwendeten Elementvariablen abzurufen (Werte sind SPADE, HEART, DIAMOND, CLUB). Daher muss es über ein Argument in der Klasse gehalten werden.

Referenzmaterial

[New Edition Refactoring - Vorhandenen Code sicher verbessern - (OBJECT TECHNOLOGY SERIES)](Fixer Link: http://amzn.asia/c5WxOUh)

Recommended Posts

[Java] Express-Aufzählungstyp ohne Verwendung des Aufzählungstyps (Aufzählung)
Aufzählung (Aufzählungstyp)
[Java] Aufzählungstyp
So formatieren Sie Enum mit dem Formatierer-Maven-Plugin (Java)
Verwendung des Java-Aufzählungstyps
[Java] enum (Aufzählungstyp)
Map ohne Verwendung eines Arrays in Java
Hinweise zu Operatoren, die Java ~ String type ~ verwenden
Java-Typkonvertierung
[Inhouse-Lernsitzung] Java-Grundlagenausführung ohne Verwendung von IDE- (2017/07/06)
Java Optionaler Typ
[Java] Konvertieren Sie DB-Code mit enum in einen Codewert
Java-Doppeltyp
[Java-Anfänger] println-Methode ohne Angabe des Sammlungstyps
Sortieren mit Java-Komparator
Anwendungsbeispiel für Java Enum
[Java] Datentyp ①-Basistyp
Schrottpraxis mit Java ②
[Swift] Aufzählungstyp für gemeinsam genutzte Typen
Enum Reverse Map Java
[Java, Kotlin] Typabweichung
Feld für den Java-Klassentyp
Typbestimmung in Java
Java # 1 studieren (typischer Typ)
Schrottpraxis mit Java ①
Fehler in Java ausdrücken
[Java] Konvertierung des Datumstyps
Ich möchte Java Applet ohne Verwendung einer IDE erstellen
Überprüfen Sie den Status der Java-Anwendung, ohne das Überwachungstool zu verwenden
[Java8] Verwenden Sie stream, um Arrays vom Typ int in absteigender Reihenfolge zu sortieren