どのようにJavaで列挙値の実装を提供するには?

user1298426:

私は時間で成長すると仮定していると私は新しい列挙値を追加し、ユーザーはまた、impementationのどこかを提供する値を持つ列挙型クラスを持っています。しかし、私はimpementationが他のクラスになりますようimpementationを提供するためにそれらを強制するかどうかはわかりません。例えばのために

public enum DayType {
    SUNDAY,
    MONDAY;
}

クラスに言及

class X{
DateType dateType;
..
}

そして、いくつかの他のクラスで使用

if (x.getDateType().equals(DayType.SUNDAY)) {
...
}else if(x.getDateType().equals(DayType.MONDAY)){
..
}

誰かがDATETYPEを追加するのであれば、彼は同様のif-elseロジック上記でimpementationを追加することを余儀なくされなければなりません。好ましくは、可能な場合、機能インターフェイスを追加することによって?

impementationは春の依存関係を持っているように私は、列挙型クラスでimpementationを強制することはできません。

GhostCat敬礼モニカC.:

本当の答えは次のようになります。これをしません。

あなたには、いくつかの「タイプ」を持っている、とあなたは、この「タイプ」は異なる動作が必要な時間をかけて新しい化身を、表示されることがわかっている場合は、その答えは、抽象クラスとポリモーフィズムを使用することです。

あなたが何かを持っているという考え:あなたがもし/他のチェーン、またはswitchステートメントを使用するかどうかは関係ありません。

if (someObject.getSomething() == whatever) { then do this } else { that }

悪い習慣があります!

すべての場合には、そのようなオブジェクトの「一般的な」メソッドを呼び出すために、異なるサブクラスのインスタンスを返すために、工場内などswitchステートメントを使用する必要があります。

現在のアプローチは、A)は、複数の方法で依存関係を強制する)内部状態及びBについての知識を外在あります。

これはどのようにスパゲッティコードの開始です!より良いステップバックして、これを解決するためのより多くのOOPの方法を考えます!

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=196378&siteId=1