繁体   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