2

例如,我有一个名为Fooinside的类Foo.java,它将使用一个名为Barinside的类../Bar.java。当我这样做的时候,有什么办法可以让它工作javac Foo.java吗?

4

3 回答 3

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在其他地方..

于 2012-10-03T06:40:35.223 回答
1

假设它们都是你的类并且属于同一个模块,你应该使用包并且两个类应该存在于同一个包层次结构中。然后它会自动工作。

例如,包可能类似于 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,它可以解决这些问题)。

于 2012-10-03T06:40:16.057 回答
0

您的类有包,这些包反映在目录结构中。例如com/company/pk/Foocom/company/Bar- 然后您可以使用该import语句引用它们。如果您的类在不同的目录中但没有声明 a package,那么您做错了。

了解软件包

于 2012-10-03T06:41:11.383 回答