我想知道是否有办法绕过这个问题而不改变包结构。
我有两个类似的网络应用程序具有相同的包结构。类的名称也相同。
我想使用这些软件包的两个版本,并在第三个应用程序中从类创建对象。
这样做的原因是,我想创建一个管理这两个其他网络应用程序用户帐户的Web应用程序。两者的包结构都是com/mycompany/User.java
问题(我认为)是我不能在我的类路径中拥有这两个应用程序包结构,并且在创建对象时可以区分它们。
即
创建User
对象时,如何指定我要从包1或包2创建它。我不想重构代码或更改应用程序包的结构方式。< / p>
答案 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)。但它会非常混乱,我建议重命名/重新包装。