4

これはよくある質問のようですが、提案ボックスの項目のどれも、私が疑問に思っていることを正確に説明していません. このリンクでは、誰もが enum 型を使用することを提案しました (これは現在調査済みですが、以前は使用したことがありません)。私は単に HashMap を使用することを提案し、回答を読んで Enum ( http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html ) が実際により良い回答であるかどうかを確認しようとしていました。オラクルのそのリンクによると、「定数の固定セットを表す必要があるときはいつでも列挙型を使用する必要があります。」そうです。

私の質問は...なぜですか?彼らが変わらないということは、むしろ契約を結ぶことですか?一部のクラス機能を取得するためのより短い方法はありますか? パフォーマンスはどうですか?同じクラスで定数を定義するのとなぜこれが違うのですか?

ありがとうございました!

4

6 に答える 6

5

型の安全性は確かに正当な理由です。メソッドに文字列を渡す場合、それは何でもかまいません。列挙型を渡すと、それが有効な値の 1 つであることが確実になります。列挙型は、可能性のセットが限られている場合に適しています。値を拡張する必要がある場合は、HashMap が適しています。

于 2012-12-14T17:19:34.887 に答える
4

列挙型は、可能な値をセットに制限し、コンパイル時に他の値を避けることができる非常に制限されたデータ型です。HashMap を使用すると、多くの無効な値を挿入でき、実行時に検出できるようになりますが、もちろんコンパイルされます。

于 2012-12-14T17:19:59.993 に答える
2

ハッシュマップはかなりの量のメモリを使用し、一定時間のルックアップと挿入があっても、実行する必要がある適切なレベルの処理がまだあります。ハッシュを計算する必要があり、競合するスロットを解決する必要があります.

もう 1 つの利点は、列挙値の間でビット演算を簡単に使用して、他の値を表すことができることです。Windows API はこれを頻繁に行います。

于 2012-12-14T17:20:01.040 に答える
0

私の意見では、それらは宣言して使用するのが速いだけであり、オラクルが言うように、それらは定数に適しています。列挙型は変更できないので、リソースの使用量は少ないと思います。

于 2012-12-14T17:16:18.217 に答える