java - 有没有办法在 java 中使用 package-private 来允许其他包访问?

标签 java c# internal package-private

所以我已经使用 C# 工作多年,现在使用 Java。在 C# 中,您可以使用 internal 关键字从公共(public) View 中隐藏类/方法,但如果您特别授予它,则允许某些程序集/包访问。当我在 Java 中环顾四周时,我没有看到任何与内部直接相同的东西。

我发现了 package-private。但是,这使它完全不为外界所知。 Java 中是否有一种方法可以允许某些其他包访问内部代码而不将其公开?

如果你问我为什么要这样做,答案通常是单元/集成测试,或者需要让某些受信任的包访问代码而不是重复它。我知道有些人认为您不应该测试私有(private)/内部代码。我也知道允许内部访问通常不是好的软件工程。我对讨论这些话题并不感兴趣,只是好奇你是否能做我想做的事。

谢谢。

最佳答案

Java 不像 .NET 那样有程序集的概念(至少现在没有)。最接近的是 OSGi bundle,它有这个概念(x-internal、x-friend 等),但这并不是真正的核心 Java。

如果您不使用 OSGi,则无需经历这一复杂过程。只要确保您的单元测试与被测类在同一个包中即可。 Maven 目录结构(即使您不使用 Maven,这也是一个不错的选择)为您设置 src/main/javasrc/test/java 等.

关于java - 有没有办法在 java 中使用 package-private 来允许其他包访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31550817/

相关文章:

java - Archiva/Maven 作为企业存储库

c# - 以编程方式禁用 Outlook 插件

c# - 如何创建自定义下拉菜单

c# - 从数组中删除空白值并建议一种更好的方法来读取由 '|' 分隔的文本文件数据

c# - Protected Internal 和 Internal Protected 之间有区别吗?

c# - 如何使用内部构造函数从具有新约束的泛型类创建实体

java - 我如何绘制 Java 中非常小的值?

java - 在 Eclipse 中运行多模块 Maven Web 应用程序

java - 有没有办法捕获 Java 中 Google App Engine 上所有未处理的错误?

c# - 内部类访问修饰符不起作用?