JAvaでは列挙(enum)でよく見られる7つの使い方
5451 ワード
JDK 1.5の前に、JAVAは2つの方法で新しいタイプを定義することができます:クラスとインタフェース、大部分のオブジェクト向けプログラミングに対して、この2つがあれば十分なようですが、いくつかの特殊な状況では適切ではありません.たとえば、Colorクラスを定義するには、Red、Green、Blueの3つしかありません.他の値はエラーで、JDK 1.5以降に列挙タイプが導入されます.
用法一:定数
JDK 1.5以前に定数を定義したのは、public static fianl....であり、列挙は関連する定数を列挙タイプにグループ化することができ、列挙は定数よりも多くの方法を提供した.
用法二:switch
JDK 1.5からswitch文はEnum列挙値をサポートし、列挙を使用することで、コードの可読性を向上させることができます.
使用法3:列挙に新しいメソッドを追加する
使用法四:列挙を上書きする方法
以下にtoString()メソッドオーバーライドの例を示す.
使用法五:インタフェースの実装
すべての列挙はjava.lang.Enumクラスから継承されます.Javaはマルチ継承をサポートしていないため、列挙オブジェクトは他のクラスを継承できません.
使用法6:インタフェースを使用して列挙を整理する
使用法7:列挙集合の使用について
JAva.util.EnumSetとjava.util.EnumMapは2つの列挙集合です.EnumSetは、集合内の要素が重複しないことを保証します.EnumMapのkeyはenumタイプであり、valueは任意のタイプであってもよい. EnumMap を使用 EnumSet を使用
用法一:定数
JDK 1.5以前に定数を定義したのは、public static fianl....であり、列挙は関連する定数を列挙タイプにグループ化することができ、列挙は定数よりも多くの方法を提供した.
public enum Color {
RED, GREEN, BLANK, YELLOW
}
Color c = Color.BLUE ; //
System.out.println(c) ;
用法二:switch
JDK 1.5からswitch文はEnum列挙値をサポートし、列挙を使用することで、コードの可読性を向上させることができます.
public class SwitchEnum {
Color color = Color.RED;
public void change() {
switch (color) {
case RED:
color = Color.GREEN;
break;
case YELLOW:
color = Color.RED;
break;
case GREEN:
color = Color.YELLOW;
break;
}
}
}
使用法3:列挙に新しいメソッドを追加する
public enum Color {
RED(" ", 1), GREEN(" ", 2), BLANK(" ", 3), YELLO(" ", 4);
//
private String name;
private int index;
//
private Color(String name, int index) {
this.name = name;
this.index = index;
}
//
public static String getName(int index) {
for (Color c : Color.values()) {
if (c.getIndex() == index) {
return c.name;
}
}
return null;
}
// get set
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
}
使用法四:列挙を上書きする方法
以下にtoString()メソッドオーバーライドの例を示す.
public enum Color {
RED(" ", 1), GREEN(" ", 2), BLANK(" ", 3), YELLO(" ", 4);
//
private String name;
private int index;
//
private Color(String name, int index) {
this.name = name;
this.index = index;
}
// ,
@Override
public String toString() {
return this.index+"_"+this.name;
}
}
使用法五:インタフェースの実装
すべての列挙はjava.lang.Enumクラスから継承されます.Javaはマルチ継承をサポートしていないため、列挙オブジェクトは他のクラスを継承できません.
public interface Behaviour {
void print();
String getInfo();
}
public enum Color implements Behaviour{
RED(" ", 1), GREEN(" ", 2), BLANK(" ", 3), YELLO(" ", 4);
//
private String name;
private int index;
//
private Color(String name, int index) {
this.name = name;
this.index = index;
}
//
@Override
public String getInfo() {
return this.name;
}
//
@Override
public void print() {
System.out.println(this.index+":"+this.name);
}
}
使用法6:インタフェースを使用して列挙を整理する
public interface Food {
enum Coffee implements Food{
BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO
}
enum Dessert implements Food{
FRUIT, CAKE, GELATO
}
}
使用法7:列挙集合の使用について
JAva.util.EnumSetとjava.util.EnumMapは2つの列挙集合です.EnumSetは、集合内の要素が重複しないことを保証します.EnumMapのkeyはenumタイプであり、valueは任意のタイプであってもよい.
import java.util.EnumMap ;
import java.util.Map ;
enum Color{
RED , GREEN , BLUE ;
}
public class EnumMapDemo{
public static void main(String args[]){
Map desc = null ; // Map ,
desc = new EnumMap(Color.class) ; // EnumMap
desc.put(Color.RED," ") ;
desc.put(Color.GREEN," ") ;
desc.put(Color.BLUE," ") ;
System.out.println("====== ======") ;
for(Color c:Color.values()){
System.out.println(c.name() + " --> " + desc.get(c)) ;
}
System.out.println("====== ======") ;
for(Color c:desc.keySet()){
System.out.print(c.name() + "、") ;
}
System.out.println() ;
System.out.println("====== ======") ;
for(String s:desc.values()){
System.out.print(s + "、") ;
}
}
};
import java.util.EnumSet ;
enum Color{
RED , GREEN , BLUE ;
}
public class EnumSetDemo{
public static void main(String args[]){
EnumSet esOld = null ; // EnumSet
EnumSet esNew = null ;
System.out.println("======== EnumSet.copyOf(Color.class) =====") ;
esOld = EnumSet.noneOf(Color.class) ; // EnumSet
esOld.add(Color.RED) ; //
esOld.add(Color.GREEN) ; //
esNew = EnumSet.copyOf(esOld) ; //
print(esNew) ;
}
public static void print(EnumSet temp){ //
for(Color c:temp){ // EnumSet
System.out.print(c + "、") ;
}
System.out.println() ;
}
};