对导入包的正确方法感到困惑
Confused about correct way to import packages
我的目录结构很简单:在一个目录中,我有一个文件Foo.java和一个文件Bar.java
Foo.java:
package Foo;
public class Foo {
}
Bar.java:
import Foo.*;
public class Bar {
public static void main(String argv[]) {
Foo foo; // This line breaks compilation
System.out.println("Hello world!");
}
}
没有 Foo foo
行,一切都可以正常编译。但是当我添加它时,我得到:
$ javac Bar.java Foo.java
Bar.java:5: error: cannot access Foo
Foo foo;
^
bad class file: ./Foo.class
class file contains wrong class: Foo.Foo
Please remove or make sure it appears in the correct subdirectory of the classpath.
1 error
我做错了什么?
javac Bar.java Foo.java
,这是完全错误的。Foo
在名为 Foo
的包中(请使用不同的名称以避免混淆)。
你必须使用 javac -d "path to classes dir here" Foo/Foo.java
和 javac -d "path to classes dir here " Bar.java
.
如果Foo.java
和Bar.java
都在同一个Foo
包中,则不需要导入Foo.*
包(这样导入静态方法和共享Foo 的常量 class);你只要写:
package Foo;
public class Bar {
public static void main(String[] args) {
Foo foo;
System.out.println("Hello World");
}
}
如果你制作了两个不同的包:Foo
用于 Foo.java
和 Bar
用于 Bar.java
,你写:
package Bar;
import Foo.Foo; // or import Foo.*;
public class Bar {
public static void main(String[] args) {
Foo foo;
System.out.println("Hello World");
}
}
我的目录结构很简单:在一个目录中,我有一个文件Foo.java和一个文件Bar.java
Foo.java:
package Foo;
public class Foo {
}
Bar.java:
import Foo.*;
public class Bar {
public static void main(String argv[]) {
Foo foo; // This line breaks compilation
System.out.println("Hello world!");
}
}
没有 Foo foo
行,一切都可以正常编译。但是当我添加它时,我得到:
$ javac Bar.java Foo.java
Bar.java:5: error: cannot access Foo
Foo foo;
^
bad class file: ./Foo.class
class file contains wrong class: Foo.Foo
Please remove or make sure it appears in the correct subdirectory of the classpath.
1 error
我做错了什么?
javac Bar.java Foo.java
,这是完全错误的。Foo
在名为 Foo
的包中(请使用不同的名称以避免混淆)。
你必须使用 javac -d "path to classes dir here" Foo/Foo.java
和 javac -d "path to classes dir here " Bar.java
.
如果Foo.java
和Bar.java
都在同一个Foo
包中,则不需要导入Foo.*
包(这样导入静态方法和共享Foo 的常量 class);你只要写:
package Foo;
public class Bar {
public static void main(String[] args) {
Foo foo;
System.out.println("Hello World");
}
}
如果你制作了两个不同的包:Foo
用于 Foo.java
和 Bar
用于 Bar.java
,你写:
package Bar;
import Foo.Foo; // or import Foo.*;
public class Bar {
public static void main(String[] args) {
Foo foo;
System.out.println("Hello World");
}
}