2016-07-23 12 views
0

異なる設定タイプを扱うDAOを構築しようとしています。私はランタイムエラーの可能性なしでこれを行うきちんとした方法があるかどうか疑問に思っていた。Java - DAOの異なるタイプの同じ列挙型

これを行うには、より良い方法がありますか?私は、何かに欠けているような気がします。おそらく列挙型に型を与える何らかの方法、または私が逃したパターンです。

少なくとも、getDefault名が同じであることを強制する方法。

ヒント?

+0

確かに、あなたのようなあなたのDAOでちょうど2つの汎用メソッドを宣言することができます。ここで詳細が必要です... – arcy

答えて

1

これを行うにはより良い方法がありますか?私は、何かに欠けているような気がします。おそらく列挙型に型を与える何らかの方法、または私が逃したパターンです。 少なくとも、getDefault名が同じであることを強制する方法。

あなたのニーズに合わせて、別のデザインを使用することもできます。
getDefault()メソッドを実装するためには、各列挙型で実装する必要があるインターフェイスを導入することができます。このようにして、各列挙型はインタフェースで宣言されてから同じ基本型(どちらのインタフェース)とgetDefault()が提供されているか確信しています。私はあなたがあなたのDAOを使用する方法がわからない

public interface IChannelSetting<T> { 

    public T getDefaultValue(); 

} 


public enum ChannelSettingInteger implements IChannelSetting<Integer> { 

    CHANNEL_LOOKBACK(50); 

    private Integer defaultValue; 

    ChannelSettingInteger(Integer defaultValue) { 
     this.defaultValue = defaultValue; 
    } 

    @Override 
    public Integer getDefaultValue() { 
     return defaultValue; 
    } 
} 

が、ちょうど:インターフェイスでジェネリック型を使用することにより は、各列挙はgetDefaultValue

サンプルコードのための独自のデータ型を持つことができますあなたの個人情報については、必要に応じて共通の基本インターフェースを利用して、DAOに対称的なロジックと少ないコードを持たせることができます。私はあなたが欲しいものを言うことができない

public interface ChannelSettingDAO { 
    <T> T getSetting(IChannelSetting<T> channelSetting); 
    <T> void setSetting(IChannelSetting<T> channelSetting, T value); 
} 
+0

これはまさに私が探していたものです。ジェネリックインターフェイスを作成して、 'implements'の部分にタイプを強制することはできませんでした。 これがなければ、私ができることは最高でした: public Object getDefaultValue(); – deadfire19

+0

私はそう思っています:) 実際には、本当にタイプを強制しません。 genericリストと似ています。使用するジェネリック型を宣言する場合にのみ強制されます。 しかし、タイプを正確にするとすぐに、制約を作成します。 – davidxxx

関連する問題