24

たとえば、一意の要素を保証する Collection (java.util.Set の実装者だと思います...) よりも列挙型の方が適しているのはどのような状況ですか?

(これは私の前の質問からの一種のフォローアップです)

4

6 に答える 6

27

基本的に、コンパイル時に既知である、明確に定義された固定の値のセットである場合。

列挙型をセットとして非常に簡単に使用でき ( EnumSetを使用)、動作を定義したり、名前で要素を参照したり、それらをオンにしたりすることができます。

于 2009-01-26T19:47:45.933 に答える
5

要素が事前にわかっていて変更されない場合は、列挙型が適切です。

実行時に要素が変更される可能性がある場合は、Set を使用します。

于 2009-01-26T19:48:33.530 に答える
3

私はJavaの第一人者ではありませんが、特定の値のプールを保証したい場合は列挙を使用し、一意性を保証したい場合はコレクションを使用すると思います。例は、曜日を列挙し(「ファンデー」はありません)、SSNのコレクションを取得することです(私が知っている一般的な例です!)

于 2009-01-26T19:48:28.117 に答える
2

注: EnumSet で両方を持つことができます。

于 2009-01-26T22:06:50.083 に答える
2

素晴らしい回答 - 私自身の参考のために要約してみます - 2つの状況で列挙型を使用する必要があるようです:

必要なすべての値は、コンパイル時に既知であり、次のいずれかまたは両方です。

  • 通常のコレクションの実装よりも優れたパフォーマンスが必要な場合
  • 潜在的な値をコンパイル時に指定された値に制限したい

Jon が提供した列挙リンクに対する Collection を使用すると、全体的な設計に組み込むことなく、実装の詳細として enum のパフォーマンスと安全性の利点を得ることができます。

コミュニティ wiki です。必要に応じて編集と改善を行ってください。

于 2009-01-26T20:03:08.350 に答える
0

場合によっては、ビジネスで新しいアイテムを作成する必要がありますが、同時にいくつかの固定アイテムに基づくビジネス ロジックもあります。列挙型が必要な固定のものについては、新しいものには明らかに何らかのコレクション/データベースが必要です。

この種のアイテムのコレクションを使用するプロジェクトを見たことがあります。その結果、ユーザーが削除できるデータに依存するビジネス ロジックが生成されます。これは絶対に行わないでください。必要に応じて、固定されたものには別の列挙型を作成し、他のものにはコレクションを作成してください。

もう 1 つの解決策は、固定値の不変オブジェクトを含むコレクションを使用することです。これらのアイテムはデータベースに存在することもできますが、追加のフラグがあるため、ユーザーはそれを更新/削除できません。

于 2009-01-26T21:23:46.877 に答える