如何在Java中使用父目录中的类?
例如,我在Foo.java
有一个名为Foo
的类,它将在../Bar.java
使用一个名为Bar
的类。 当我做javac Foo.java
时,有没有办法让这项工作成功?
将您的类添加到类路径..
javac -cp "path to your Bar.class" Foo.java
您还需要在Foo.java
导入该类。更好地使用包,并将类路径提供给包含您的包的目录。这样您就可以为类提供不同的命名空间。
所以,如果您的软件包是: – pkg1.pkg2.Bar
并且您已将.java
保存到名为Demo
的目录中,那么您的类路径应该包含直到Demo
路径..并且您的类实际上将位于另外两个目录下pkg1/pkg2/Bar.class
Demo
目录中的pkg1/pkg2/Bar.class
..
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/pk/Foo
和com/company/Bar
– 那么你可以使用import
语句引用它们。 如果你的类在不同的目录但没有声明一个package
,那么你做错了。
了解包裹
假设这些都是您的类并且属于同一个模块,那么您应该使用包,并且这两个类应该存在于同一个包层次结构中。 然后它会自动工作。
例如,包类似于com.company.application.module.Bar和com.company.application.module.subcomponent.Foo。 查看有关正确的包命名的更多讨论:
- Oracle.com:命名包
- 维基百科:包命名约定
您还可以将javac -sourcepath path/to/src/solution/java;path/to/src/test/java
显式指向多个位置(注意-classpath
也可以工作,请参阅有关差异的讨论 )。
如果我们讨论的是同一模块中不存在的单独组件,那么您只需使用类路径来使代码知道两者(或者最好是某些依赖机制,如Maven,它可以解决问题)。