Java eNumの初心者向けガイド–なぜ、何のためにEnumを使用する必要があるのですか? Java列挙型の例
公開: 2019-04-23 列挙型は、変更できない変数のようなconstants
のリストです。 Final keyword
について聞いたことがありますか? そのようなものです。
ある種の数値またはテキストデータを表す事前定義された値のリストが必要な場合は、列挙型を使用する必要があります。 たとえば、チェスゲームでは、さまざまな種類の駒を列挙型として表すことができます。
1 2 3 4 5 6 7 8 |
enum ChessPiece { PAWN , ROOK , KNIGHT , BISHOP , QUEEN , KING ; } |
変数(特にメソッドパラメーター)が可能な値の小さなセットから1つしか取得できない場合は、常に列挙型を使用する必要があります。 例としては、型定数(契約ステータス:「永続的」、「臨時雇用者」、「見習い」)、フラグ(「今すぐ実行」、「実行の延期」)などがあります。
整数(または文字列コード)の代わりに列挙型を使用すると、コンパイル時のチェックが増え、エラーが無効な定数を渡すのを防ぎ、どの値を使用できるかを文書化します。
Javaの例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
package com . crunchify . tutorials ; /** * @author Crunchify.com */ public class CrunchifyEnumExample { public enum Company { EBAY , PAYPAL , GOOGLE , YAHOO , ATT } Company cName ; public CrunchifyEnumExample ( Company cName ) { this . cName = cName ; } public void companyDetails ( ) { switch ( cName ) { case EBAY : System . out . println ( "EBAY: Biggest Market Place in the World." ) ; break ; case PAYPAL : System . out . println ( "PAYPAL: Simplest way to manage Money." ) ; break ; case GOOGLE : case YAHOO : System . out . println ( "YAHOO: 1st Web 2.0 Company." ) ; break ; default : System . out . println ( "DEFAULT: Google - biggest search giant.. ATT - my carrier provider.." ) ; break ; } } public static void main ( String [ ] args ) { CrunchifyEnumExample ebay = new CrunchifyEnumExample ( Company . EBAY ) ; ebay . companyDetails ( ) ; CrunchifyEnumExample paypal = new CrunchifyEnumExample ( Company . PAYPAL ) ; paypal . companyDetails ( ) ; CrunchifyEnumExample google = new CrunchifyEnumExample ( Company . GOOGLE ) ; google . companyDetails ( ) ; CrunchifyEnumExample yahoo = new CrunchifyEnumExample ( Company . YAHOO ) ; yahoo . companyDetails ( ) ; CrunchifyEnumExample att = new CrunchifyEnumExample ( Company . ATT ) ; att . companyDetails ( ) ; } } |
出力:
1 2 3 4 5 6 7 |
EBAY : Biggest Market Place in the World . PAYPAL : Simplest way to manage Money . YAHOO : 1st Web 2.0 Company . YAHOO : 1st Web 2.0 Company . DEFAULT : Google - biggest search giant . . ATT - my carrier provider . . Process finished with exit code 0 |
Java列挙型に関するいくつかの非常に重要なポイント:
ポイント-1
すべての列挙型は暗黙的にjava.lang.Enum
を拡張します。 Javaは多重継承をサポートしていないため、列挙型は他に何も拡張できません。
ポイント2
Enum in Java are type-safe:
列挙型には独自の名前空間があります。 これは、列挙型が次の例の「Company」などの型を持ち、列挙型定数で指定されている以外の値を割り当てることができないことを意味します。
1 2 3 4 5 6 |
public enum Company { EBAY , PAYPAL , GOOGLE , YAHOO , ATT } Company cName = Company . EBAY ; cName = 1 ; // Compilation Error |

ポイント-3
作成時に列挙型定数の値を指定できます。 MyEnum.values()
は、MyEnumの値の配列を返します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
package com . crunchify . tutorial ; /** * @author Crunchify.com */ public class CrunchifyEnumExample { public enum Company { EBAY ( 30 ) , PAYPAL ( 10 ) , GOOGLE ( 15 ) , YAHOO ( 20 ) , ATT ( 25 ) ; private int value ; private Company ( int value ) { this . value = value ; } } public static void main ( String [ ] args ) { for ( Company cName : Company . values ( ) ) { System . out . println ( "Company Value: " + cName . value + " - Company Name: " + cName ) ; } } } |
出力:
1 2 3 4 5 |
Company Value : 30 - Company Name : EBAY Company Value : 10 - Company Name : PAYPAL Company Value : 15 - Company Name : GOOGLE Company Value : 20 - Company Name : YAHOO Company Value : 25 - Company Name : ATT |
ポイント-4
列挙型定数は暗黙的に静的で最終的なものであり、一度作成すると変更できません。
ポイント-5
列挙型は、以下を使用して安全に比較できます。
- Switch-Caseステートメント
- ==演算子
- .equals()メソッド完全なチュートリアルに従ってください。
1 2 3 4 |
Company eBay = Company . EBAY ; if ( eBay == Company . EBAY ) { log . info ( "enum in java can be compared using ==" ) ; } |
ポイント-6
JavaのEnumのコンストラクターはプライベートのみであり、Enums定数はEnums自体の内部でのみ作成できるため、Javaでnew演算子を使用して列挙型のインスタンスを作成することはできません。
ポイント7
JavaのEnumのインスタンスは、コードでEnum定数が最初に呼び出されたときまたは参照されたときに作成されます。
ポイント8
列挙型は、型に割り当てられた定数値のリストを指定します。
ポイント-9
列挙型はクラスの外部または内部で宣言できますが、メソッド内では宣言できません。
ポイント-10
クラスの外部で宣言された列挙型は、static、final、abstract、protected、またはprivateとマークしてはなりません。
ポイント-11
列挙型には、コンストラクター、メソッド、変数、および定数クラス本体を含めることができます。
ポイント-12
enum定数は、構文BIG(8)を使用して、enumコンストラクターに引数を送信できます。この場合、intリテラル8がenumコンストラクターに渡されます。
ポイント-13
列挙型コンストラクターは引数を持つことができ、オーバーロードすることができます。
ポイント-14
列挙型コンストラクターをコードで直接呼び出すことはできません。 これらは、列挙型が初期化されるときに常に自動的に呼び出されます。
ポイント-15
列挙型宣言の最後のセミコロンはオプションです。
これらは合法です:
- 列挙型Foo {ONE、TWO、THREE}
- 列挙型Foo {ONE、TWO、THREE};
別の単純なJavaeNUMの例:
列挙型は定数のリストです。 ある種の数値またはテキストデータを表す事前定義された値のリストが必要な場合は、列挙型を使用する必要があります。
変数(特にメソッドパラメーター)が可能な値の小さなセットから1つしか取得できない場合は、常に列挙型を使用する必要があります。 例としては、型定数(契約ステータス:「永続的」、「臨時雇用者」、「見習い」)、フラグ(「今すぐ実行」、「実行の延期」)などがあります。
整数(または文字列コード)の代わりに列挙型を使用すると、コンパイル時のチェックが増え、エラーが無効な定数を渡すのを防ぎ、どの値を使用できるかを文書化します。
その間、列挙型の使いすぎは、メソッドの実行が多すぎることを意味する場合があります(多くの場合、実行内容を変更する複数のフラグを取得する1つのメソッドではなく、複数の個別のメソッドを使用する方が適切です)が、フラグまたは型コードを使用する必要がある場合は、列挙型行く方法です。
これは非常に単純なJavaeNumの例です
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
package com . crunchify . tutorials ; /** * @author Crunchify.com */ public enum CrunchifyEnumCompany { GOOGLE ( "G" ) , YAHOO ( "Y" ) , EBAY ( "E" ) , PAYPAL ( "P" ) ; private String companyLetter ; private CrunchifyEnumCompany ( String s ) { companyLetter = s ; } public String getCompanyLetter ( ) { return companyLetter ; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
package com . crunchify . tutorials ; import com . crunchify . tutorials . CrunchifyEnumCompany ; /** * @author Crunchify.com */ public class CrunchifyEnumExample { public static void main ( String [ ] args ) { System . out . println ( "Get enum value for Comapny 'eBay': " + CrunchifyEnumCompany . EBAY . getCompanyLetter ( ) ) ; } } |
出力:
1 |
Get enum value for Comapny 'eBay' : Value : E |