例如,我有一个名为Foo
inside的类Foo.java
,它将使用一个名为Bar
inside的类../Bar.java
。当我这样做的时候,有什么办法可以让它工作javac Foo.java
吗?
3 回答
将您的类添加到类路径..
javac -cp "path to your Bar.class" Foo.java
您还需要将该类导入您的Foo.java
.. 最好使用一个包,并将类路径提供到包含您的包的目录.. 这样您就可以为您的类提供不同的命名空间..
所以,如果你的包是: -pkg1.pkg2.Bar
并且你已经将你的包保存.java
到一个名为 的目录Demo
中,那么你的类路径应该包含路径直到Demo
.. 并且你的类实际上将在目录pkg1/pkg2/Bar.class
内的另外两个Demo
目录下。
Demo+
|
+-- B.java (`Under package pkg1.pkg2)
|
+--pkg1+
| |
| +--pkg2+
| |
| +-- B.class
|
+-- A.java (`Under no package`) - Add - import pkg1.pkg2.B
|
+-- A.class (javac -cp . A.java) - Will search the package pkg1.pkg2 in current directory
即使.
那里不需要,你也可以用任何路径替换它,如果你B.class
在其他地方..
假设它们都是你的类并且属于同一个模块,你应该使用包并且两个类应该存在于同一个包层次结构中。然后它会自动工作。
例如,包可能类似于 com.company.application.module.Bar 和 com.company.application.module.subcomponent.Foo。查看更多关于正确包命名的讨论:
您也可以javac -sourcepath path/to/src/solution/java;path/to/src/test/java
明确指向多个位置(请注意,这-classpath
也可以,请参阅有关差异的讨论)。
如果我们谈论的是同一个模块中不存在的单独组件,您只需使用类路径来让代码知道两者(或者最好是一些依赖机制,如 Maven,它可以解决这些问题)。
您的类有包,这些包反映在目录结构中。例如com/company/pk/Foo
和com/company/Bar
- 然后您可以使用该import
语句引用它们。如果您的类在不同的目录中但没有声明 a package
,那么您做错了。