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.
Suit.java
public enum Suit {
SPADE("♠"), HEART("♡"), DIAMOND("♢"), CLUB("♣");
private String symbol;
private Suit(String symbol){
this.symbol = symbol;
}
public String getSymbol(){
return symbol;
}
}
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;
}
}
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.
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.
[New Edition Refactoring - Vorhandenen Code sicher verbessern - (OBJECT TECHNOLOGY SERIES)](Fixer Link: http://amzn.asia/c5WxOUh)
Recommended Posts