5

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

我发现了包私有。但是,这使它对外界完全隐藏。Java中有没有办法允许某些其他包访问内部代码而不将其公开?

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

谢谢。

4

2 回答 2

4

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

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

于 2015-07-21T22:46:41.817 回答
1

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

这不适用于密封包装。

于 2015-07-21T22:42:25.697 回答