列挙とは何ですか?
列挙は、JDK5によって導入された新機能です。場合によっては、クラスのオブジェクトが固定されており、列挙として定義できます。実際には、プログラムパラメーターの安全性を確保するための仕様として列挙タイプを使用することもできます。列挙には次の特性があります。
java.lang.Enumクラスからデフォルトで継承し、 java.lang.Seriablizableとjava.lang.Comparable 2つのインターフェイスを実装します。public static finalであり、非アブストラクト列挙クラスはサブクラスを導き出すことはできません。 java.lang.Enumクラスのequals()は次のとおりです。
//これは最終的な変更であり、サブクラスはパブリックファイナルブールの等しい(オブジェクトの他の)を書き換えることを許可されていません{this == other;}列挙の一般的な方法
int compareTo(E o)
この列挙の順序を指定されたオブジェクトと比較します。オブジェクトが指定されたオブジェクト、またはそれ以上の場合、ネガティブ整数、ゼロまたは正の整数よりも小さい場合、それぞれ返されます。列挙定数は、同じ列挙タイプの他の列挙定数とのみ比較できます。
//パブリックファイナルint compareto(e o){enum other =(enum)o; enum self = this; if(self.getClass()!= other.getClass()&& // optimization self.getDeclaringClass()!= other.getDecLaringClass())Throw New ClassCastException(); self.ordinal -other.ordinal;} String name()
このenumインスタンスの名前を返します。
static values()
すべての列挙値を繰り返すために使用できるすべての列挙値を含む配列を返します。
String toString()
このenumインスタンスの名前、つまりenum値を返します。 name()と同じ。
// name()およびtoString()in enum public string toString(){return name;} public final string name(){return name;} int ordinal()
列挙クラスの列挙値のインデックス値(0から始まる)、つまり、列挙値宣言の順序に依存する列挙宣言の列挙値の順序を返します。
<T extends Enum<T>> valueOf()
指定された列挙型の列挙定数を指定された名前で返します。名前は、このタイプの列挙定数を宣言するために使用される識別子と正確に一致する必要があります(エキストラホワイトスペース文字は許可されていません)。この方法はtoStringに対応するため、 toString() toString()をオーバーライドする場合、 valueOf() toString() valueOf()メソッドvalueOf()オーバーライドする必要があります。
列挙の適用
列挙は特別なタイプであり、その使用法は通常のクラスの使用法と非常に似ています。
定数のセットを交換します
public Enum Color {赤、緑、空白、黄色}スイッチステートメントで使用されます
// switchはJDK1.6 enum Signal {緑、黄色、赤} ... switch(coler){case red:color = signal.green;壊す; } ...列挙にメソッドを追加します
public Enum Color {Red( "Red")、Green( "Green")、Blank( "White")、Yello( "Yellow"); //メンバー変数プライベート文字列名。 //コンストラクタープライベートカラー(文字列名){this.name = name; } // get setメソッドpublic string getname(){return name; } public void setName(string name){this.name = name; }}インターフェイスを実装します
パブリックインターフェイスの動作{void print(); } public Enum Color Implesign Behavior {Red( "Red"、1)、Green( "Green"、2)、Blank( "White"、3)、Yello( "Yellow"、4); // interface method @override public void print(){system.out.println(this.index+":"+this.name); }}抽象メソッドを含む列挙クラス
Public Enum Operation {//追加操作Plusの実行に使用される{//ブレースパーツは、実際には匿名の内部サブクラス@Overrideパブリックダブル計算(ダブルx、double y){return x + y; }}、// subtraction操作マイナスを実行するために使用される{//ブレースパーツは、実際には匿名の内部サブクラス@Overrideパブリックダブル計算(ダブルx、ダブルy){// todo auto -fenerated method stub returt x -y; }}、//乗算操作時間を実行するために使用{//ブレースパーツは実際には匿名の内部サブクラス@Overrideパブリックダブル計算(double x、double y){return x * y; }}、//分割操作除算を実行するために使用される{//カーリーブレースパーツは、実際には匿名の内部サブクラス@Overrideパブリックダブル計算(double x、double y){return x / y; }}; //この列挙クラスの抽象メソッドを定義します。列挙クラスのすべての列挙値は、このメソッドを実装する必要がありますパブリックアブストラクトダブル計算(ダブルx、ダブルy);}列挙でシングルトンを実装する(シングルトンのベストプラクティス)
利点:
1.列挙の機能を使用して、単一のケースを実装します
2。JVMはスレッドの安全性を保証します
3.シリアル化と反射攻撃は列挙によって解決されました
public enum singleton {instance; Public Singleton getInstance(){//この方法を追加して、この実装方法は比較的まれであるため、他の人にそれを使用する方法を理解させることができます。インスタンスを返す; }}その他の列挙の使用
eNumset
range(E from, E to)
列挙値からさまざまなセットを取得します。
for(weekdayenum day:enumset.range(weekdayenum.mon、weekdayenum.fri)){system.out.println(day); } of(E first, E... rest)
元々指定された要素を含む列挙セットを作成します。
noneOf(Class<E> elementType)
指定された要素タイプを使用して空の列挙セットを作成します。
enummap
EnumMap(Class<K> keyType)
指定されたキータイプを備えた空の列挙マップを作成します。
map <weather、string> enummap = new enummap <weather、string>(weather.class); enummap.put(weather.sunny、 "sunny"); enummap.put(weather.rainy、 "rainy");
Androidでの列挙
列挙は、大量のメモリを占有する必要があります。メモリに敏感な場合は、可能な限り少ない列挙を使用し、静的定数に置き換えてください。
ただし、列挙を使用しない場合、セキュリティリスクがいくつか発生するため、職員は2つの注釈を開始しました。これは、列挙期間中にタイプチェックするために列挙された列挙のためにタイプチェックできます。これらの2つの注釈は、@intdefと@stringdefです。コンパイル 'com.android.support:support-annotations:+'にあります。
使用の例
@StringDefの使用は、@IntDefと一致しています。ここでは、@IntDefを例に取ります。
パブリックインターフェイスqrcodeType {int wechat = 0; int alipay = 1; @intdef({wechat、alipay})@retention(retentionpolicy.source)@target({elementType.field、elementType.method、elementType.parameter})@interface checker {}} public class qrcode { @qrcodetype.checker // define in typetion public void setType(@qrcodetype.checker intタイプ){//パラメーターで定義this.type = type; } @qrcodetype.checker //メソッドで定義する(つまり、返品値のタイプを確認)public int getType(){return Type; }}使用に関する推奨事項
開発で最も広く使用されている範囲は、静的定数のセットではなく列挙を使用することです。この場合、代わりに上記の注釈法を使用できます。
列挙に他の関数(他の定義された方法を含むなど)も含まれている場合、置き換えることはできません。
要約します
上記は、この記事のコンテンツ全体です。この記事の内容があなたの研究や仕事に役立つことを願っています。ご質問がある場合は、メッセージを残してコミュニケーションをとることができます。