Java enumを扱う際のコード再利用に最適なデザインパターンに関する質問があります。基本的に、私が達成しようとしているのは、静的なビジネスコレクション(定数のセット)をモデル化するいくつかの列挙型を定義できることですが、最小限のコーディングでそれらの間で振る舞いを共有したいと思います。Java Enumを拡張する
これは、抽象クラスからのクラス継承で実現するのは簡単ですが、Javaの列挙型は拡張できないため(インターフェイスのみを実装できます)、このタイプの作業は面倒でエラーが発生しやすいコピー/列挙型から列挙型へのコード)。すべての列挙型の間で共有されるべき "ビジネスロジック"の例には、文字列の変換、インスタンスと論理比較などが含まれます。
私のベストショットは、ビジネスインタフェースと組み合わせてヘルパークラスを使用しています。これまではコードの複雑さを軽減することができました(すべての列挙体は依然としてヘルパークラスを宣言して呼び出す必要があります)。 (ただ明確にする)の例を参照してください:
public enum MyEnum {
A, B, C;
// Just about any method fits the description - equals() is a mere example
public boolean equals(MyEnum that) {
ObjectUtils.equals(this, that);
}
}
どうStackOverflowersは、この「言語機能」を扱うのですか?
と 'Delegate' @、私は決してきたんロンボクを試みることができます列挙型で試しました。 –
Java 6では、列挙型は最終クラスです。それらを拡張することはできません。私はJava 7は同じだと信じています。 – DwB
そのための列挙型は作成されていません。クラス(または列挙型のクラス)を使用するか、ロジックを分離するかどちらかです。このような場合にファクトリパターンを使用することができます(動作がenumからenumまで十分に異なる場合)。 – Viruzzo