Eclipse的重构工具是否违反了Java语言规范?

Tom*_*sky 2 java eclipse

在Eclipse 3.5中,假设我有这样的包结构:

 tom.package1
 tom.package1.packageA
 tom.package1.packageB
Run Code Online (Sandbox Code Playgroud)

如果我右键单击tom.package1包并转到Refactor-> Rename,则会出现一个选项"Rename subpackages"作为复选框.如果我选择它,然后重命名tom.package1tom.red我的包结构,最终会像这样:

tom.red
tom.red.packageA
tom.red.packageB
Run Code Online (Sandbox Code Playgroud)

但我听说Java的包不是分层的.Java教程将其备份(请参阅有关包的表观层次结构的部分).在这种情况下,Eclipse肯定会将包视为分层.

我很好奇为什么访问说明符不能允许/限制在前一个问题中访问"子包",因为我知道我之前曾在某处看过"子包".

Eclipse的重构工具是否通过推进"子包装"神话故意误导易受影响的年轻人?或者我在这里误解了什么?

Mar*_*ers 7

在这种情况下,Eclipse不可能违反JLS,因为它与编译或运行Java源代码或字节码无关.

重构工具的行为与它们一样,因为这种行为对开发人员很有用.这种行为对开发人员很有用,因为对于许多意图和目的,我们确实将包视为层次结构(abc与ab有某种关系,即使这种关系在项目之间不一致).这并不意味着Java本质上将它们视为层次结构.

人们将包视为非常分层的一个例子是配置日志框架,例如log4j.同样,它不是log4j固有的,但这就是人们在实践中使用它的方式.


dan*_*ben 5

Java包在某种意义上不是分层的,因为从包A中导入所有内容并不会从包中导入所有内容A.B.

但是,Java包确实直接对应于文件系统上的目录结构,并且目录分层的.所以Eclipse正在做正确的事情 - 它重命名目录,它自动更改重命名目录的子目录的父目录的名称(说明非常明显).

  • @Tom Tresansky:当然有.从JLS(http://java.sun.com/docs/books/jls/second_edition/html/packages.doc.html):"包的命名结构是分层的(第7.1节).包的成员是类和接口类型(第7.6节),它们是在包的编译单元中声明的,以及**子包**,它们可能包含它们自己的编译单元和子包." 它只是引用另一个包中的包. (2认同)