包级可见性有两个很好的用法(以我的经验):
1)在公共API中定义“内部”类。通常,您会将接口和核心工厂定义为公共,将“内部”实现定义为程序包级别。然后,公共工厂可以构造包级别的实现类,并将它们作为公共接口的实例返回。这很好地允许用户仅访问应有的内容。
缺点是您必须将所有这些东西放在同一个包中,这对于任何大小合理的API几乎都不是一个好主意。 希望Java 7中的JSR
294 / modules / Project
Jigsaw将提供一种替代方法,方法是指定一个新的可见性修饰符(
module),该修饰符可用于跨包访问模块内的类,而无需在模块外使它们可见。您可以在本文中找到一个示例,说明如何进行此操作。
2)单元测试是另一个常见用例。通常,您会看到一个src树和一个测试树,而本来是私有的则是包级别的,以便同一(并行)包中的单元测试能够访问否则隐藏的方法以检查或操纵状态。



