2012-01-05 10 views
1

私はC#から来て、javaのswitch文がちょっと混乱しています。Javaは列挙型でどのように切り替わるのですか?

キャラクターをオンにすることはできますが、列挙をオンにすることはできます。

これは内部的に値が切り替わるためですか?

なぜ列挙型にメソッドを追加したいですか?

+0

」を書くことができる方法
を使用して代わりに

switch(planet){ case Mars: doWhatMarsDo();break; case Earth: doWhatEarthDo();break; } 

をすることの方が良いだろう文字をオンに切り替える - または整数?または文字列ですか? – BeRecursive

+0

? switch文はC#とJavaでは全く同じです – Matthias

答えて

7

あなたの質問の背後にある仮定が間違っているように聞こえます。 enumの値、整数型(charintbyteなど)、またはStringのインスタンスを有効にすることができます。

内部的には、すべてのスイッチがlookupswitchまたはtableswitchの2つの命令のいずれかにコンパイルされます。どちらの命令も、それぞれのケースに別個の整数でラベルを付ける必要があります。 enumの値を使用すると、値の「順序」が使用されます。 Stringインスタンスを使用する場合、コンパイラは各文字列を一意の値にマップするための追加のコードを挿入します。他のタイプは直接使用されます。これについての詳細はこちらin another answer.

enumのメソッドは他のオブジェクトのメソッドと同じ目的を果たします。それらを使用して多態的な動作を実装することも、単純なアクセサとして実装することもできます。

+4

Java 7以降の文字列インスタンスのみ! –

+1

そして、 'enum'値はJava 5以降にしかありません! – erickson

+0

okスイッチではないので、おそらく私が参考にしたものです(pre 7)。 – codecompleting

1

二次質問:enumにはプロパティを取得するなどのメソッドが必要な場合があるため、計算などが必要です。Enumメソッドは非常に便利で、面白いゲームを再生できます。

さえ、tutorial's exampleは、enumプロパティとメソッドを使用して、あまり効果がありません。

2

「なぜ列挙型にメソッドを追加しますか?
C#では、enumは構文上の砂糖を含む制限された整数です。javaではenumが実際のクラスです。本当に違いがあります。他のクラスに追加するのと同じ理由で、列挙型にメソッドを追加して、それを行うことができます!例として、スイッチオーブンを列挙型に使用するたびに、スイッチの代わりに列挙型のメソッドを完全に使用でき、よりオブジェクト指向にすることができます。あなたが複数の場所で同じ列挙型の上に切り替える必要がある場合と、あなたはおそらく、あなたはあなたができるだけで

planet.doYourThing(); 
関連する問題