2017-06-01 15 views
2

私は2つの同じモデルクラスを持っていますが、それらは異なるパッケージにあります。 まず一つは次のとおりです。model.my.prod.Modelと第二model.my.test.Model2つの同じクラスの異なるパッケージからの一般的な使用

私もパラメータとしてModelクラスを取るこのmodel.my.prod.Modelのためのシンプルなマッパーがあります

public class Mapper{ 

    private static Map<Model, String> models= new HashMap<>(); 

    static { 
     models.put(Model.IMAGE_JPG, MediaType.IMAGE_JPEG_VALUE); 
     models.put(Model.IMAGE_GIF, MediaType.IMAGE_GIF_VALUE); 
    } 

    public static String createModelMap(Model model) { 
     if (models.containsKey(model)) { 
      return models.get(model); 
     } else { 
      throw new ModelException("Exeception"); 
     } 
    } 
} 

今私がmodel.my.test.Modelのためにも、このMapperを使用したいが、これはMapperのコピーなしで可能ですかModelパッケージを変更しますか?あなたは完全修飾クラス名を使用することができます(必要なとき)

public class Mapper{ 

    // private static Map<Model, String> models= new HashMap<>();   
    private static Map<Object, String> models= new HashMap<>(); 

    static { 
     models.put(Model.IMAGE_JPG, MediaType.IMAGE_JPEG_VALUE); 
     models.put(Model.IMAGE_GIF, MediaType.IMAGE_GIF_VALUE); 
    } 

    // public static String createModelMap(Model model) { 
    public static String createModelMap(Object model) { 
     if (models.containsKey(model)) { 
      return models.get(model); 
     } else { 
      throw new ModelException("Exeception"); 
     } 
    } 
} 

答えて

2

あなたは、オブジェクトと明示的なキャストを使用することができます。あなたのコードは醜いものになりますが、あなたはMapperのModelクラスに使うことができます。

ので、代わりに

public static String createModelMap(Model model) 

のあなたは、私は別の、より意味のある名前で両方のクラスの名前を変更するために、あなたを提案することができ、追加で二つの方法

public static String createModelMap(model.my.prod.Model model) 
    public static String createModelMap(model.my.test.Model model) 

を持つことになります。 そして、また、それは生産とテストクラス用のパッケージを持っている悪い考えです、あなたは

3

+0

ようなパッケージを避けるために、デフォルトの達人/ Gradleのプロジェクト構造を使用することができますそれは解決策ですが、私はそれがに接続されていると思います'createModelMap'関数の重複コードです。 – allocer

関連する問題