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

Is there a way to use package-private in java to allow other packages access?

所以我已经在 C# 中工作了很多年,现在在 Java 中工作。在 C# 中,您可以使用 internal 关键字从 public 视图中隐藏 class/method,但如果您特别授予它,则允许某些 assemblies/packages 访问。当我在 Java 中环顾四周时,我没有看到任何与内部直接相同的东西。

我发现了 package-private。但是,这使它完全不为外界所知。在 Java 中有没有办法允许某些其他包访问内部代码而不使它成为 public?

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

谢谢。

您可以将您的测试放在另一个地方的同名包中。这被视为同一个包,您可以访问包私有 类。测试 类 可以放在另一个 JAR 文件中,如 testSomething.jar 而被测试的包是 something.jar.

的一部分

这不适用于密封的包裹。

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

如果你没有使用 OSGi,应该没有必要经历这个复杂的过程。只需确保您的单元测试与正在测试的 class 在同一个包中。 Maven 目录结构(即使您不使用 Maven,这也是一个不错的选择)为此设置 src/main/javasrc/test/java