类存放在与包指定的目录不同的目录中 - 为什么?

以下陈述似乎令人不安地起作用:
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语言规范的要求: http://java.sun.com/docs/books/jls/third_edition/html/packages.html     

要回复问题请先登录注册