Enum「優雅で清潔」に問題を解決
3524 ワード
1.分析コード1とコード2のコード
コード1:
コード2:
2.討論と総括
何か悪いことがあったら、みんなこのように長い間使っていたので、大丈夫ですね.まず、タイプが安全ではありません.intであることを確認しなければなりません.次に、その範囲が0と1であることを確認しなければなりません.最後に、多くの場合、印刷されると、1と0しか見えませんが、コードを見ていない人はあなたの企みを知らないことがあります.so、古いpublic static final定数をすべて捨てましょう.
3.他のクラスを継承できない以外は、通常のクラスとしてEnumクラスを作成できます(javaは単一の継承であり、Enumクラスを継承しています).クラスでメソッド、実装メソッド、リロードメソッドなどを宣言できます.
4)Switch文ではサポートはEnum
5)values()メソッドは、コンパイラがenum定義に挿入するstaticメソッドなので、enumインスタンスを親Enumに変換するとvalues()にアクセスできません.解決策:ClassにgetEnumConstants()メソッドがあるので、Enumインタフェースにvalues()メソッドがなくても、Classオブジェクトからすべてのenumインスタンスを取得できます.
6)enumからサブクラスを継承することはできません.enumの要素を拡張する必要がある場合は、インタフェースの内部にインタフェースを実装する列挙を作成し、要素をグループ化します.列挙要素をグループ化します.
7)エンムセットをフラグの代わりに使用する.Enumではメンバーが一意であることが要求されますが、enumでは追加要素を削除できません.
8)EnumMapのkeyはenumであり、valueは他のObjectオブジェクトである.
9)enumは、プログラマがeunmインスタンスのメソッドを記述することを許可する.したがって、enumインスタンスごとに異なる動作を付与することができる.
10)enumの職責チェーン(Chain of Responsibility)を使用する.これは設計モードに関係する職責チェーンモードである.いろいろな方法で一つの問題を解決する.そして彼らをリンクします.1つのリクエストが来ると、チェーン内のソリューションがリクエストを処理できるまで、このチェーンを巡回します.
11)enumを使用したステータスマシン
12)enum多重配布の使用
回転:http://tech.e800.com.cn/articles/2009/97/1252286198897_1.html
コード1:
import java.util.EnumMap;
import java.util.EnumSet;
/**
* enum , , ,switch,enumset,enummap
* @author
*
*/
public class EnumBasic {
/* */
public enum State{
ON,
OFF
}
public static void main(String[] args){
//
for(State s:State.values()){
System.out.println(s.name());
}
//swith enum
System.out.println("enum swith ");
State state = State.OFF;
switch(state){
case OFF:
System.out.println("It is OFF");
break;
case ON:
System.out.println("It is ON");
break;
}
//enumset
// EnumSet enumSet = EnumSet.allOf(State.class);
System.out.println("enumset ");
for(State s : EnumSet.allOf(State.class)){
System.out.print(s.name() +" ");
}
//EnumMap
System.out.println("EnumMap ");
EnumMap enumMap = new EnumMap(State.class);
enumMap.put(State.ON, " is ON ");
enumMap.put(State.OFF, " is OFF ");
for(State s:State.values()){
System.out.println(enumMap.get(s));
}
}
}
コード2:
/**
*
* @author zuohuai
*
*/
public enum TestEnumMethod {
/**
*
*/
SMAPLE1{
public String getInfo(){
return "SMAPLE1's return String";
}
},
SMAPLE2{
public String getInfo(){
return "SMAPLE2's return String";
}
};
//
public abstract String getInfo();
public static void main(String[] args){
for(TestEnumMethod methods : TestEnumMethod.values()){
System.out.println(methods.getInfo());
}
}
}
2.討論と総括
public class State {
public static final int ON = 1;
public static final Int OFF= 0;
}
何か悪いことがあったら、みんなこのように長い間使っていたので、大丈夫ですね.まず、タイプが安全ではありません.intであることを確認しなければなりません.次に、その範囲が0と1であることを確認しなければなりません.最後に、多くの場合、印刷されると、1と0しか見えませんが、コードを見ていない人はあなたの企みを知らないことがあります.so、古いpublic static final定数をすべて捨てましょう.
3.他のクラスを継承できない以外は、通常のクラスとしてEnumクラスを作成できます(javaは単一の継承であり、Enumクラスを継承しています).クラスでメソッド、実装メソッド、リロードメソッドなどを宣言できます.
4)Switch文ではサポートはEnum
5)values()メソッドは、コンパイラがenum定義に挿入するstaticメソッドなので、enumインスタンスを親Enumに変換するとvalues()にアクセスできません.解決策:ClassにgetEnumConstants()メソッドがあるので、Enumインタフェースにvalues()メソッドがなくても、Classオブジェクトからすべてのenumインスタンスを取得できます.
6)enumからサブクラスを継承することはできません.enumの要素を拡張する必要がある場合は、インタフェースの内部にインタフェースを実装する列挙を作成し、要素をグループ化します.列挙要素をグループ化します.
7)エンムセットをフラグの代わりに使用する.Enumではメンバーが一意であることが要求されますが、enumでは追加要素を削除できません.
8)EnumMapのkeyはenumであり、valueは他のObjectオブジェクトである.
9)enumは、プログラマがeunmインスタンスのメソッドを記述することを許可する.したがって、enumインスタンスごとに異なる動作を付与することができる.
10)enumの職責チェーン(Chain of Responsibility)を使用する.これは設計モードに関係する職責チェーンモードである.いろいろな方法で一つの問題を解決する.そして彼らをリンクします.1つのリクエストが来ると、チェーン内のソリューションがリクエストを処理できるまで、このチェーンを巡回します.
11)enumを使用したステータスマシン
12)enum多重配布の使用
回転:http://tech.e800.com.cn/articles/2009/97/1252286198897_1.html