在 Java 项目中公开所有类是最佳实践吗?我注意到在我使用过的所有 Java 项目中,只有公共类。
7 回答
这不是指导方针,不。
信息隐藏原则告诉我们只暴露需要的东西,仅此而已,以最小化耦合。
因此,例如,如果一个类可以让您更轻松地处理单独类中的逻辑,并且仅由该类使用,则没有理由将其公开,也不应该将其公开。
您的问题的简单答案是“不!”
稍微复杂一点的是,如果一个类需要被它自己的包之外的其他类使用,你应该只公开一个类。但是,如果像我一样,为了便于阅读,您将项目分成许多包,那么通常情况下,您的类需要公开才能使用。
虽然您的问题很容易提出,但它的本质远非简单。很大程度上取决于您编写的代码类型。如果您正在编写一个库然后在外部使用,那么您的议程可能很重要。在应用程序中则更少。
我发现我更喜欢公开的方法。我尝试设计重用,因为它使我的选择保持开放,由于重用问题让我更仔细地考虑我的实现,这会导致更好的代码。但这确实是课程的马,你是这个等式中最大的变量。
不它不是。有很多具有其他访问说明符甚至匿名的类。例如,您可以编写可以注册到诸如“ActionListener”和“ItemListener”之类的侦听器的私有或匿名类。就像那样,出于各种目的,我们确实编写了很多没有公共说明符的类。将您的工作分成几部分确实很有帮助。
但是,在 Java 中,通常每个源文件都包含一个公共类。这是因为如果源文件的名称是“Reader.java”,则该源文件中的“Reader”类不能有私有或其他访问说明符。它必须是公共的或默认的。除此之外,没有其他类可以使用访问说明符“public”而不是“Reader”类。
另一件事是,私有、受保护和其他类型(默认除外)的类不能作为“独立类”写入源文件。例如,以下是一个错误
检查.java
private class Check
{
}
通常大多数类确实是公共的,但在某些情况下,您可能还想使用默认或私有范围。
使用默认作用域的类只能被同一包中的其他类访问。例如,在帮助类的情况下,当您的代码变得更加封装时,以这种方式限制它们的使用通常是一个好习惯。出于同样的原因,私有作用域通常可以用于内部类。
这取决于,对于顶级课程,如果您希望其他课程在不同的包中查看您的课程,您应该mark it public
。如果您只想让同一个包中的类查看您的类mark it default
(无修饰符)。
所以,你的问题是真的,所有顶级课程都应该公开吗?我认为这归结为您在项目中使用的包访问权限。不久前,这个问题与此相关。
这绝对不是最佳实践。您看到它是因为大多数程序员不知道顶级类不必是公共的。
理想情况下,包不仅仅是将类组织成组的一种方式。属于单个包的类没有最小或最大数量;相反,只有在需要包级类和/或成员时才应创建子包。Java API 经常这样做,并且由于从 Sun/Oracle 分发的 javadoc 是为受保护级别的类和成员生成的,因此某些包可能看起来很稀疏,甚至显得荒谬。
例如,javax.swing.colorchooser包看起来只有四个类,但实际上有 17 个(实际数量可能因 Java 版本而异)。四个是公开的;其余的仅用于 JColorChooser 内部。
我发现一个变得太大而无法作为内部类轻松维护的内部类通常是非公共顶级类的良好候选者。