gpt4 book ai didi

java - 如何解决缺少包访问说明符的问题?

转载 作者:行者123 更新时间:2023-12-01 05:26:35 25 4
gpt4 key购买 nike

我是 Java 新手。我发现,在尝试构建我的代码时,Java 将源文件组织(目录结构)与包结构以及包结构与类的外部可见性紧密联系在一起(一个类要么对所有其他包可见,要么不可见)。

这使得将我的公共(public)库的内部实现细节组织成相关功能的逻辑单元,同时保持良好的封装变得相当困难。 JSR 294解释得最好:

Today, an implementation can be partitioned into multiple packages. Subparts of such an implementation need to be more tightly coupled to each other than to the surrounding software environment. Today designers are forced to declare elements of the program that are needed by other subparts of the implementation as public - thereby making them globally accessible, which is clearly suboptimal.

Alternately, the entire implementation can be placed in a single package. This resolves the issue above, but is unwieldy, and exposes all internals of all subparts to each other.

所以我的问题是,针对此限制有哪些解决方法,有哪些优点和缺点? JSR中提到了两个——使用包进行逻辑分组(违反封装);将所有东西放在一个包中(笨重)。这些解决方法还有其他优点/缺点吗?还有其他解决方案吗? (我已经模糊地意识到 OSGi bundle ,但我发现很难理解它们如何工作以及优点/缺点可能是什么(也许这是一个缺点)。它似乎是与普通软件包相比,对开发和部署来说非常具有侵入性。

注意:我会对任何好的答案投赞成票,但最佳答案将是全面考虑其他答案的优点和缺点的答案(抄袭!)。

相关(但不重复!)问题

期待“可能重复”的呼声,以下是我在 SO 上发现的类似问题;我在这里展示它们以供引用,并解释为什么它们没有回答我的问题。

最佳答案

ProGuard这样的工具可用于重新打包 JAR,仅公开您在配置文件中指定的那些类。 (除了优化、内联和混淆之外,它还执行此操作。)您可以在例如中设置 ProGuard Maven 或 Ant 构建,因此您可以编写公开方法的库,然后使用 ProGuard 将它们从生成的 JAR 中消除。

关于java - 如何解决缺少包访问说明符的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9611443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com