0

我有 3 个不同的 Java 项目:

Project A: some basic functionality (Package: "com.a.b.c")
Project B: should be a library and uses A (Package: "com.b.c.d")
Project C: should be a library and uses A (Package: "com.c.d.e")

当我放弃 B 和 C 的库时,我希望 A 的功能完全隐藏在库中,所以我正在考虑包的可见性,但不想将源代码从 A 复制到 B 和C(相应地更改包)。我可以以某种方式将源代码从 A 链接到 B 和 C,以便根据其他(链接)项目对它的包进行不同的解释吗?示例:项目 C 看到来自项目 A 的源代码,就好像它是它自己的包的一部分。

希望这是可以理解的。

提前致谢

4

1 回答 1

0

这在 Java 中是不可能的。我喜欢将 Java 中的包视为一种模块。因此,包可见成员/类提供了仅在模块内部需要的功能,但太大而无法放入单个类(它将是私有的)。让 B 或 C 访问包的可见元素会破坏模块 A 的封装(不幸的是,Java 中的包更多的是命名约定,而不是内在的模块机制)。

所以你想让B和C与模块A的公共接口交互。你想要实现的是在我的理解中,限制谁可以使用模块A的接口——这在Java中是不可能的。事实上,Java 中的所有可见性级别都不提供防止“未经授权”使用的保护。可以通过在同一个包中定义访问类(即使它在另一个 .jar 中)来破坏包的可见性,可以通过反射来破坏私有和受保护的类。

如果你想隐藏 A 以防止被盗,你可以使用源代码混淆器,使反编译/重新工程更加困难。

于 2013-09-03T12:54:52.690 回答