假设我的根包中有 20 个类。我决定通过在根包下创建 3 个子包来组织这些类。然后我将 5 个类放入每个子包中,在根包中留下 5 个类(因为它们是顶级类)。现在因为我需要使用根包中 5 个类的子包中的类,所以我最终将子包中的类公开,而在子包之前,这些类只在包内公开。
上面的代码组织是在良好的指导下完成的。分包是按功能而不是按层。包之前的相互依赖被最小化。但是,许多子包类仍然可以从更高的级别访问。
是否有解决此类场景的良好做法?
假设我的根包中有 20 个类。我决定通过在根包下创建 3 个子包来组织这些类。然后我将 5 个类放入每个子包中,在根包中留下 5 个类(因为它们是顶级类)。现在因为我需要使用根包中 5 个类的子包中的类,所以我最终将子包中的类公开,而在子包之前,这些类只在包内公开。
上面的代码组织是在良好的指导下完成的。分包是按功能而不是按层。包之前的相互依赖被最小化。但是,许多子包类仍然可以从更高的级别访问。
是否有解决此类场景的良好做法?
不幸的是没有。通过将其设为包私有(默认访问),您可以拥有的最多的是包级别的可见性。你不能让一个类只对同一个模块中的其他类可见。我认为Project Jigsaw和JSR 294将解决这个问题(除了其他东西),但你可能要到 Java 9 才能看到它。