簡體   English   中英

通用使用2個相同的類但來自不同的包

[英]Generic use of 2 same classes but from different packages

我有兩個相同的模型類,但它們在不同的包中。 第一個是: model.my.prod.Model和第二個model.my.test.Model

我還有一個這個model.my.prod.Model的簡單映射器, model.my.prod.Model 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");
        }
    }
}

現在,我想用這個Mappermodel.my.test.Model ,是有可能沒有這個副本Mapper和更改Model包?

您可以使用完全限定的類名。 它會使你的代碼變得丑陋,但你可以在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) 

另外,我建議您使用不同且更有意義的名稱重命名這兩個類。 而且,為生產和測試類提供包也是一個壞主意,您可以使用默認的maven / gradle項目結構來避免這樣的包

您可以使用Object和顯式轉換(必要時)

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");
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM