最佳做法是在Java项目中公开所有类吗?我注意到在我使用的所有Java项目中,只有公共类。
答案 0 :(得分:3)
这不是指南,不是。
信息隐藏原则告诉我们只暴露所需的,而不是更多,以尽量减少耦合。
因此,例如,如果一个类允许您更容易地处理单独类中的逻辑,并且仅由该类使用,则没有理由将其公开,也不应将其公开。
答案 1 :(得分:2)
你问题的简单答案是“不!”
稍微复杂一点的是,如果需要由其自己的包之外的其他类使用,则应该只将类设为public。但是,如果像我一样,你打破了你为了可读性而投入到许多软件包中,那么通常情况下你的类需要公开才能使用。
虽然您的问题很容易提出,但其性质远非简单。很大程度上取决于你写作的代码类型。你在写一个图书馆然后在外面使用可能是你议程上的重点。在较少的应用程序中。
我发现我更喜欢公共方法。我尝试设计重用,因为它保持我的选项开放,使我更仔细地考虑我的实现,因为重用问题,这导致更好的代码。但它确实是课程的马匹,你是这个等式中最大的变量。
答案 2 :(得分:1)
这取决于,对于顶级课程,如果您希望其他课程在不同的课程中查看您的课程,您应该mark it public
。如果您只希望同一个包中的类可以查看类mark it default
(无修饰符)。
答案 3 :(得分:1)
那么,你的问题是,如果所有顶级课程都公开了吗?我认为这归结为您在项目中使用的包访问。不久前This question与此相关。
答案 4 :(得分:1)
通常大多数类都是公开的,但有些情况下您可能也想使用默认或私有范围。
使用默认范围的类只能由同一包中的其他类访问。例如,在辅助类的情况下,随着代码变得更加encapsulated,以这种方式限制它们的使用通常是一种好习惯。出于同样的原因,私有范围通常可用于内部类。
答案 5 :(得分:1)
不,不是。有许多类与其他访问说明符甚至匿名。例如,您可以编写可以注册到侦听器的私有或匿名类 'ActionListener'和'ItemListener'。就像那样,出于各种目的,我们写了许多没有公共说明符的类。将作品分成几部分真的很有帮助。
但是,在Java中,通常每个源文件都包含一个公共类。这是因为如果源文件的名称是“Reader.java”,则该源文件中的“Reader”类不能具有私有或其他访问说明符。它必须是公开的或默认的。除此之外,没有其他类可以使用访问说明符“public”而不是“Reader”类。
其他的是,private,protected和其他类型(默认除外)类不能作为“Independent classes”在源文件中写入。例如,以下是错误
<强> Check.java 强>
private class Check
{
}
答案 6 :(得分:1)
绝对不是最佳做法。你看到它是因为大多数程序员不知道顶级课程不必公开。
理想情况下,包不仅仅是将类组织成组的方法。单个包中没有最小或最大数量的类;相反,只有在需要包级别的类和/或成员时才应创建子包。 Java API实现了这一点,并且由于从Sun / Oracle分发的javadoc是为受保护级别的类和成员生成的,因此某些包可能看起来很稀疏,甚至可能出现无意义的问题。
例如,javax.swing.colorchooser包似乎只有四个类,但它实际上有17个(实际数量可能因Java版本而异)。四个是公开的;其余的只适用于JColorChooser内部。
我发现内部阶级变得太大而不能轻易维持为内部阶级,这通常是成为非公共顶级阶层的良好候选者。