具有类可见性的最佳实践

时间:2012-12-16 17:50:10

标签: java

最佳做法是在Java项目中公开所有类吗?我注意到在我使用的所有Java项目中,只有公共类。

7 个答案:

答案 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内部。

我发现内部阶级变得太大而不能轻易维持为内部阶级,这通常是成为非公共顶级阶层的良好候选者。