【问题标题】:java mandatory package declaration [duplicate]java强制包声明[重复]
【发布时间】:2015-06-02 22:44:08
【问题描述】:

在java中,为什么每个类都必须声明它所属的包。我的意思是,包层次结构已经使用文件夹描述/强制执行 文件系统的结构。在我看来,这条线:

package com.mypackage;

由于每个类的第一行在某种程度上都是冗余信息。但我很确定它的存在是有充分理由的。

【问题讨论】:

  • 可能整个文件夹结构是多余的 - 我不知道,但我希望编译器在文件中查找包名称而不是遍历文件夹树,因为这可能真的很慢,当您有一个包含 1000 个类和包的大型项目时。
  • 为什么你认为package 是强制性的?

标签: java packages


【解决方案1】:

我的意思是,包层次结构已经使用文件系统的文件夹结构进行了描述/实施。

不一定。虽然以这种方式组织代码当然是个好主意,但这不是必需的。还要记住,源代码不需要在文件系统中开始。

从根本上说,我认为将源文件的 内容 放在重要位置是完全合理的。哎呀,你可以把它带到另一个极端,并假设类是由文件名声明的——这不仅仅是一个约定,而是一个明确有效的(在 JLS 中)由编译器对公共顶级类强制执行。

【讨论】:

  • 所以你从根本上说,JLS 允许你将所有的类放在一个文件或一个目录中,这样,给定一个兼容的编译器,包声明根本不会是多余的?
  • @GionJh:是的,当然。试试吧——把很多不同包的Java文件放在同一个目录下,运行javac -d . *.java,你会发现class文件会创建包结构,但不需要在源文件中。另一方面,编译器会寻找没有被告知源文件的类以使用目录结构。
  • 您能否进一步解释您的评论的第二部分:“编译器将查找尚未被告知使用目录结构的源文件的类”?感谢您的宝贵时间。
  • @GionJh:如果您只编译A.java,但它引用了一个名为B 的类,编译器将尝试查找B 作为类路径上的一个类,或者B.java在源路径中,使用您的导入来确定查找位置。
  • 好的,非常感谢;)
猜你喜欢
  • 2015-09-10
  • 2023-03-12
  • 2012-12-14
  • 2017-10-28
  • 2017-11-26
  • 2014-01-05
  • 2012-11-05
  • 1970-01-01
  • 2021-08-23
相关资源
最近更新 更多