为什么 Java 中的文件名与公共类名相同?

新手上路,请多包涵

在 Java 中,该文件的名称应与该文件中包含的 public class 的名称相同。为什么这是一个限制?它有什么作用?

原文由 Thunderhashy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 437
2 个回答

Java 有一个有趣的方法:在给程序员选择只会降低编程体验的地方,删除选择。

他们在很多地方都这样做了。当然是文件名和包,但也不允许在一个文件中有多个公共类(从来都不好),不允许您在文件之间拆分类(该死的很难使用!),等等。

语言做出很多这样的决定,它们都会影响可用性和可维护性。其他一些可能是不错的选择:

公共变量:我从来不需要一个,也从来没有见过一些聪明的程序员认为需要一个而且实际上是正确的情况。

方法/类大小限制会很好,但这可能会变得粗略(它可以很容易地由代码检查器实现,问题通常是最需要帮助的公司是那些不知道他们需要帮助的公司,因此,不要使用代码检查器之类的工具)。

答案的要点是,虽然这对大多数小团队来说并不重要,但当您的团队发展壮大并拥有多个站点、分散的团队和遍布全球的顾问时,您真的很欣赏这种不灵活性。


回应 setters/getters 评论:

Java bean 是 Borland 创建的一种可憎的东西,用于破解他们的 GUI,然后改装到 Java 中。

可怕的想法——从 OO 编程中分心——Getter 和 setter A) 展示了太多你的实现和 B) 让你思考对来自另一个对象的数据进行操作,而不是要求另一个对象为你执行操作。对于还不能在 OO 中思考的人来说,这是一个糟糕的技巧。

吸气剂偶尔会用到,但除非绝对不可避免,否则不应添加。

应不惜一切代价避免使用二传手。如果您绝对需要在构造对象后从外部修改状态,请尝试使用构建器模式并保护您的 setter 在执行任何操作后不被调用。

显然一切都有例外,许多“getter”实际上是关键的对象业务逻辑,比如 String.length() ,无论 String 是如何实现的,它都是必需的,甚至不是通过返回一个属性来实现——一个很好的如果您甚至想这样称呼它,请使用“Getter”。

原文由 Bill K 发布,翻译遵循 CC BY-SA 4.0 许可协议

我正要说,那简直是 必须 的。但是我看了 JLS ,并没有那么严格。从 JLS 的角度来看,由编译器选择是否设置这样的限制。

实际上 - 普通编译器确实有这种限制,并且正如其他人已经解释的那样,编译器更容易找到编译单元或类加载器更容易找到具有这种限制的类文件。

原文由 Andreas Dolk 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题