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

Thu*_*shy 57 java

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

Bil*_*l K 45

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

他们在很多地方做到了这一点.文件名和包肯定,但也不允许文件中的多个公共类(从来没有好),不允许你在文件之间拆分类(该死的难以使用!)等.

我真的希望他们走得更远.公共变量是没有理由的:我从来不需要一个变量,我也从未见过一些聪明的程序员认为需要一个并且实际上是正确的情况.

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

这对大多数小型团队来说并不重要,但是当您的团队成长并且拥有来自印度,中国和世界各地其他地方的顾问的多个站点时,您将开始意识到这种缺乏灵活性.


响应setter/getters评论:

Java bean是Borland创建的一个令人厌恶的东西,用于破解他们的GUI,然后改装成Java.

可怕的想法 - 从OO编程中分散注意力 - Getters和setter A)显示太多的实现和B)让你考虑从另一个对象的数据操作而不是让另一个对象为你执行操作.对于那些无法在OO中思考的人而言,这是一个糟糕的行为.

偶尔需要吸气剂,但除非被认为绝对不可避免,否则不应添加吸气剂.

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

一切都有明显的例外,许多"Getters"实际上是关键对象业务逻辑,比如String.length(),无论String如何实现都是必需的,甚至不通过返回属性来实现 - 一个伟大的如果您想要称之为"Getter"的情况.

  • 在设计Java时,尚未建立getX/setX范例.我认为这是JavaBeans必须对接口进行编码的结果,并且您不能在接口中使用公共变量. (3认同)

And*_*s_D 18

我正要说,这只是必须的.但我查看了JLS,并不是那么严格.从JLS的角度来看,编译器可以选择是否设置这样的限制.

实际使用 - 常见的编译器确实有这种限制,并且正如其他已经解释的那样,编译器更容易找到编译单元或类加载器来查找具有这种限制的类文件.

  • 就语言规范而言,源代码甚至不需要包含在文件中.它是编译器处理文件中源代码的惯例. (8认同)

Gur*_*lki 10

更具体地说,文件名应该与该文件中的公共类名相同,这是告诉JVM这是入口点的方式.


Blu*_*eft 5

这只是约定由Sun,Java的的制造商设定.
目的是组织; 原因是每个使用Java编码的人都会有一种一致的命名文件方式.