我在不同的jar中有两个具有相同名称和相同包结构的类。是否可以专门从jar中选择一个类?

时间:2017-02-10 04:31:12

标签: java overloading

如上所述,我在不同的jar中有两个具有相同名称和相同包结构的类。 让我们说
jar1 中,我的班级是 a.b.c.ClassName
jar2 中,我的班级是 a.b.c.ClassName
我有不同的构造函数来区分类。

我的问题是,是否可以基于构造函数创建对象。 例如,

if(condition){
a.b.c.ClassName obj = new a.b.c.ClassName(Param);
}
else{
a.b.c.ClassName obj = new a.b.c.ClassName(Param, AnotherParam);
}

谢谢,

2 个答案:

答案 0 :(得分:2)

  

我的问题是,是否可以根据构造函数创建对象。

我带你去询问Java是否会根据哪个版本的类具有与给定签名匹配的构造函数来选择加载类的jar。不,它不会。 Java将按顺序在类路径中的目录和jar中查找指定的类,并将使用它找到的第一个类。

可以想象,您可以编写一个自定义ClassLoader,它可以帮助您根据可用构造函数的签名选择要加载的类的版本,但是这些功能不会像您希望的那样自动触发。 Java在考虑哪些构造函数可用之前加载该类。您需要手动加载类,并可能反射性地实例化它。而你的问题不会就此结束。所有这一切几乎肯定比它的价值更麻烦。

如何编写子类而不是同一个类的不同版本?

答案 1 :(得分:-1)

更改pom中的依赖顺序。导入你想要的罐子。