首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有办法在Java中为另一个类“别名”吗?

有办法在Java中为另一个类“别名”吗?
EN

Stack Overflow用户
提问于 2014-12-11 22:05:05
回答 1查看 2.6K关注 0票数 14

我有下面的API兼容性问题,并寻找解决方法。

TL;DR是否有方法为Java中的类创建一个“别名”?也就是说,让com.acme.foo.SomeEnum 成为 com.acme.bar.SomeEnum**?**的别名的一些诡计

说来话长。(为了避免指指点点,我对它进行了一点整理。)

我正在使用一个强大的Java工具,它也支持插件。没有严格定义的公共API (在某种意义上,您可以或不能接触到什么),只是通常的私有/受保护/包/公共类、方法和字段。有定义的扩展点(比如扩展com.acme.plugin.Plugin类),但是您可以访问该工具内部的一个很大的区域。

在最近的小版本更新(如1.2.3 -> 1.2.4)中,工具开发人员将一个枚举类转移到另一个包-- com.acme.foo.SomeEnum变成了com.acme.bar.SomeEnum。我认为这只是一个琐碎的重构,而不是一个序列化的重组。

然而,这个类似乎已经被许多插件所使用。其结果是,这些插件现在与最新版本不兼容。大多数插件都很有用,但没有得到积极的维护。人们几年前就写过了--而且他们只是工作了几年,更新了几十个版本。因此,这有可能对该工具的插件生态系统产生负面影响。

我的问题是,在Java中是否存在为com.acme.bar.SomeEnum创建“别名”com.acme.bar.SomeEnum的方法?这将允许旧插件继续使用新版本的工具。

什么类装载机的把戏?在JavaScript中,这将是微不足道的,但在Java中呢?

我为什么要问这个。我是Maven插件的作者之一,它包装了这个工具。所以我可以很容易地把我的糖加到这杯咖啡里,就像课堂装载机等等。如果有一种技术方法来实现这一工作,我将能够保存该工具的大部分插件生态系统--至少对Maven用户是这样的。

我已经联系了这个工具的供应商,但不确定成功与否。

只是想说清楚--我不是这个工具的供应商。我(a)为工具编写插件(更新插件没有大问题)和(b)是the-tool-maven-plugin的作者,它允许在Maven构建中执行工具。我也咨询了很多工具和关心它的生态系统(有很多非常有用的插件)。

更新

故事结束:该工具的开发人员考虑到了我的观点,并决定恢复更改。这点值得尊敬!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-11 22:14:50

我建议使用扎贾尔。这是一个允许您在库中重新打包类的工具。您可以在该工具的最新版本上运行此操作,并将SomeEnum类移动到不与插件冲突的包中。

快速入门文档有一个与jaxen.jar相关的示例,该示例看起来与您的情况相关。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27433291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档