如何在Java应用程序中导入重复的包结构和类

时间:2014-02-12 18:57:05

标签: java packages

我想知道是否有办法绕过这个问题而不改变包结构。

我有两个类似的网络应用程序具有相同的包结构。类的名称也相同。

我想使用这些软件包的两个版本,并在第三个应用程序中从类创建对象。

这样做的原因是,我想创建一个管理这两个其他网络应用程序用户帐户的Web应用程序。两者的包结构都是com/mycompany/User.java

问题(我认为)是我不能在我的类路径中拥有这两个应用程序包结构,并且在创建对象时可以区分它们。

创建User对象时,如何指定我要从包1或包2创建它。我不想重构代码或更改应用程序包的结构方式。< / p>

3 个答案:

答案 0 :(得分:3)

你不能这样做,在java一个类中由它的包和他的名字标识,你不能在同一个包中有两个同名的类。

事实上,这实际上是一个非常糟糕的做法,为什么你有两个完全相同的名字代表两个不同的东西?更改您的包,至少包括应用程序名称,名称为:

com/mycompany/myapplication/User.java

答案 1 :(得分:1)

你不能以任何推荐的方式做到这一点 你应该重构它。

如果没有机会进行重构,例如出于法律原因,请尝试这种方法:

虽然我不推荐它,但您可以使用Proguard仅对类User进行模糊处理,并使用预定义的obfuscation.map并将其命名为User2。 输出是一个新的jar文件,其中类User有一个新名称。

此类obfuscation.map条目的示例:

com.company.transform.TransformException -> ad.d:

答案 2 :(得分:1)

您可以使用从不同.jar文件加载的2个类加载器(对于复杂的解决方案,请查看OSGi)。但它会非常混乱,我建议重命名/重新包装。