0

数値を計算するという問題があり、この数値に従って特定のメソッドを呼び出さなければなりません。最終的に、各要素が別のメソッドを呼び出す列挙型を作成するというアイデアに行き着きました。この投稿で説明されているようにhttps://stackoverflow.com/a/4280838/2426316

ただ、その回答のポスターにもあまり良いデザインとは言えないと書いてあったので、どうしようか迷っています。この設計を使用するアルゴリズムを実装しても安全ですか? そうでない場合、他に何ができますか?

4

2 に答える 2

2

Java Enum 型は、タイプ セーフな列挙型パターンの言語レベル サポート (構文糖衣) です。

タイプ セーフな列挙型パターンと Java 列挙型の利点の 1 つは (C# 列挙型などの他のソリューションと比較して)、抽象メソッドであってもメソッドをサポートするように設計されていることです。

可能な使用法:

  • 戦略パターンを使用するが、戦略のセットが固定されている場所
  • switch ステートメントをポリモーフィズムに置き換えます (推奨)
  • ...

詳細については:

  • Joshua Bloch による「Effective Java」。
    • 初版には型安全な列挙型パターンが含まれています
    • 第 2 版には Java Enum 型が含まれています
  • Martin Fowler によるリファクタリング (例:条件をポリモーフィズムに置き換える)
于 2013-08-12T15:46:49.747 に答える
-3

まあ、安全性はおそらくここでは問題ではありません。ただし、従うのが難しい場合があります。

私の推奨事項は、次の 2 つの方法のいずれかでこれを構築することです。

  1. ENUMS を使用しますが、ENUM コード自体に関数呼び出しを含めないでください。むしろ、explore(Level1 level){...}渡されたレベルで区別する switch ステートメントを持つ関数を用意してください。
  2. ラムダ式を使用します。これは、関数を引数として渡すことができるため、よりクリーンなソリューションです。残念ながら、Java 8 がリリースされるまで、Java はこのメソッドをネイティブにサポートしません。ただし、Lambda 式をシミュレートする実装があり、最もよく知られているのはおそらくlambdajです。
于 2013-08-12T15:26:47.997 に答える