如何在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/Foocom/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,它可以解决问题)。