所以我已经在C#工作了很多年,现在正在使用Java。在C#中,您可以使用internal关键字从公共视图中隐藏类/方法,但如果您特别授予它,则允许某些程序集/包访问。当我环顾Java时,我看不到任何与内部直接相同的东西。
我发现了包私有。然而,这使它完全隐藏在外面的世界。 Java中是否有一种方法允许某些其他包访问内部代码而不将其公开?
如果你问为什么我会这样做,这个答案通常是单元/集成测试,或者需要让某些可信任的包访问代码而不是重复它。我知道有些人认为你不应该测试私人/内部代码。我也知道允许内部访问通常不是很好的软件工程。我对这些话题的讨论并不感兴趣,只是好奇你是否可以做我想做的事。
感谢。
答案 0 :(得分:4)
Java没有.NET中的程序集概念(至少现在还没有)。最接近的是OSGi捆绑包,它有这个概念(x-internal,x-friend等),但这不是真正的核心Java。
如果您不使用OSGi,则不需要经历这种复杂情况。只需确保您的单元测试与被测试的类在同一个包中。 Maven目录结构(即使您不使用Maven也是一个不错的选择)可以通过src/main/java
,src/test/java
等为您设置。
答案 1 :(得分:1)
您可以将测试放在另一个地方的相同包名中。这被视为相同的包,您可以访问包私有类。测试类可以放在另一个JAR文件中,例如testSomething.jar
,而测试包是something.jar
的一部分。
这不适用于密封包装。