java - 类所在的目录与包指定的目录不同——怎么会这样?

标签 java package javac

以下语句似乎令人不安地起作用:

robert@neghvar:~/tmp> cat org/foo/Bar.java 
public class Bar {

}

robert@neghvar:~/tmp> javac org/foo/Bar.java 
robert@neghvar:~/tmp> javap org.foo.Bar
Compiled from "Bar.java"
public class org.something.Bar extends java.lang.Object{
    public org.something.Bar();
}

尽管 Bar 类文件在 org/foo 目录中并声明了 org.something 包,但编译器并没有报错。我的印象是 java 要求在包名之后有一个目录层次结构。我错了吗?如果是这样,混淆包名的后果是什么?

最佳答案

源目录结构 不需要遵循包命名(尽管它几乎总是按照惯例。)

认为 Sun/Oracle javac、javap、java 等。工具(以及我所知道的所有其他 Java 实现)是强制每个包名称组件规则(以及默认类加载器)的子目录。没找到权威的,不过好像不是Java语言规范的要求:

关于java - 类所在的目录与包指定的目录不同——怎么会这样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4810385/

相关文章:

java - 如何创建类似于默认 Windows 框的文件选择器?

java - 如何从 RingoJS 访问自定义 Java 类?

java - 运算符 '+' 不能应用于对象和字符串

java - Rest Web 服务 JSON 请求正文,其中 "truee"作为 boolean 真值

java - 在给定的代码中,编译器将插入 super();动物构造函数中的声明?

java - 为什么 Java 8 Optional 实现为 final,没有 Some 和 None 层次结构?

python - python如何处理具有相同名称的模块和包?

file - Golang无法看到外部包中的模板

java - Eclipse 和 javac 之间奇怪的编译器差异

javac默认的内存初始大小和内存最大大小?