假设我的根包中有20个类。我决定通过在根包下创建3个子包来组织这些类。然后,我将5个类放入每个子包中,在根包中留下5个类(因为它们是顶级类)。现在,因为我需要使用根包中5个类中的子包中的类,所以我最终将子包内的类公开,而在对这些类进行子包之前,这些类只有包内公开。
上面的代码组织是在良好的指导下完成的。子包装是按功能而不是按层进行的。包之前的相互依赖性被最小化。但是,从更高的级别访问许多子包类是有意义的。
是否有解决这类情况的良好实践?
很遗憾没有。您最多可以通过将包私有化(默认访问权限)来获得包级别的可见性。您不能让一个类只对同一模块中的其他类可见。我认为Project Jigsaw和JSR294将解决这个问题(以及其他内容),但您可能要到Java9才能看到它。