幸いなことに、この機能は現在Java 7で実装されています。しかし、ほとんどのプロジェクトでJava 7への移行がすぐには完了しないため、デザインのかさばりを避けるために自分の「美的」方法を喜んで共有したいと思います。 .then..else。
「RequestOne」、「RequestTwo」、「RequestThree」という値を取ることができる型変数があり、これに応じて異なるスクリプトが実行されるとします。
最も単純な場合、要求を処理するメソッドのコードは次のようになります。
public void processRequest(String type) { if (type.equals("RequestOne")) { scenarioOne(); } else if (type.equals("RequestTwo")) { scenarioTwo(); } else if (type.equals("RequestThree")) { scenarioThree(); } }
タイプが長い行を受け入れる場合、または1つのスクリプトに対してタイプ値の複数のバリアントがある場合、コードは読み取りに不便かもしれません。 この場合、列挙型が役に立ちます:enum。 列挙型RequestTypeを次のように説明します。
public enum RequestType { SCENARIO_ONE("RequestOne"), SCENARIO_TWO("RequestTwo"), SCENARIO_THREE("RequestThree"); private String typeValue; private RequestType(String type) { typeValue = type; } static public RequestType getType(String pType) { for (RequestType type: RequestType.values()) { if (type.getTypeValue().equals(pType)) { return type; } } throw new RuntimeException("unknown type"); } public String getTypeValue() { return typeValue; } }
そして、processRequest(String)メソッドは次のように変換されます。
public void processRequest(String type) { RequestType request = RequestType.getType(type); switch(request) { case SCENARIO_ONE: scenarioOne(); break; case SCENARIO_TWO: scenarioTwo(); break; case SCENARIO_THREE: scenarioThree(); break; } }
もちろん、列挙されたRequestType型の静的なgetTypeメソッドは、特に多数の可能な型値に関しては最適ではありません。 しかし、このアプローチでは、タイプの文字列値のリストを1か所に保存することができ、スイッチの構築は簡潔に見えます。 したがって、新しい型の値を追加して古い値を編集すると、桁違いに速くなり、労働生産性が向上します。
結局のところ、これはパフォーマンスの点で最良のソリューションではありませんが、上記のケースで列挙型を使用する非常に良い例です。