2017-11-06 4 views
0

私は、検索クエリパラメータを構築して転送するために、複数のsearch-DTO-Classを作成しようとしています。利用可能なパラメータは、オブジェクトのデータベーステーブルに依存します。 これにより、すべてのDTOクラスに対して1つだけEnumを持つことはできません。その結果、各DTOクラスは独自のEnumの検索可能なパラメータを持ちます。インタフェースまたは抽象クラスにまだ存在しないenumの一般的な使用

検索パラメータの実際のコレクションは、EnumMap(インテイジェライズされていますが、空です)です。それぞれの検索DTOクラスにgetter,putremoveParameterというメソッドを持っています。

これら3つのメソッドはすべてのDTOクラスで論理は同じですが、戻り値の型は異なります(マップ)。だから私の質問は:

これらの3つの関数を宣言することは可能ですか? 私はどんなsearch-DTO-Classによって実装されるべきインタフェースについても持っています。しかし、私は個々の目的に合致しないワイルドカードで作業する必要があります。Enum

例コード:

public class LocationSearchParametersDTO 

{ 
    public enum LOCATION_PARAMETER 
    { 
     ID("id"); 
     private String queryParam; 

     private LOCATION_PARAMETER(String queryParam){ this.queryParam=queryParam; } 

     public String getQueryParam(){ return queryParam; } 
    } 

    private final Map<LOCATION_PARAMETER, String> searchParameters = new EnumMap<>(LOCATION_PARAMETER.class); 

    public Map<LOCATION_PARAMETER, String> getParameters(){ return Collections.unmodifiableMap(searchParameters); } 

    public void put(LOCATION_PARAMETER param, String value){ searchParameters.put(param, value); } 

    public void removeParameter(LOCATION_PARAMETER param){ searchParameters.remove(param); } 

} 
+0

私はあなたが車輪の再発明している感覚を持っています。 – assylias

+0

となる場合があります。あなたの印象を詳述してください。 –

+0

DTOがデータベーステーブルの純粋な「コピー」である場合、それらを自動生成するツールを使用すると時間を節約できます。 – assylias

答えて

0

トリッキーな事はあなたが列挙型を必要とするということです。あなたはLOCATION_PARAMETERクラスを持ちたい場合、あなたは彼らがBaseParameterを拡張して、列挙型が共通のインターフェースを拡張し、戻り値の型がうまくいくようにそれを持っていたの

public Map<? extends BaseParameter, String> searchParameters(){} 

あなたのアイデアのようなものを返すので、私持っている可能性があり

列挙型を返す必要がある場合は、インタフェースを使用しなければならないと考えています。

EDIT: それとも、それは無限の持っているし、あなたの列挙型を返すことができます:

public Map<?, String> searchParameters(){} 
関連する問題