以下语句似乎令人不安地起作用:
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/