gpt4 book ai didi

java - 如何解决以另一个类命名的文件中的类的依赖关系

转载 作者:行者123 更新时间:2023-11-29 05:42:50 27 4
gpt4 key购买 nike

Java 允许每个文件声明多个顶级类,条件是这些类中至多有一个是公共(public)的。

但是,Oracle Java 编译器似乎无法解决这些类型的依赖关系。考虑:

// One.java
package jtest;
import jtest.Three;
public class One {}

// Two.java
package jtest;
public class Two {}
class Three {}

第一次编译尝试以错误结束:

javac -cp . jtest\One.java

jtest\One.java:3: error: cannot find symbol
import jtest.Three;
^
symbol: class Three
location: package jtest
1 error

然而,这按预期工作

javac -cp . jtest\Two.java
javac -cp . jtest\One.java

现在,这是“已知”行为(例如 this answer 中报告)。但是,大多数构建系统似乎都没有问题(我尝试了 Eclipse 和 Apache Buildr)。 他们如何解决问题?

还要考虑 Eclipse 和 Apache Buildr 都可以毫不费力地编译它:

// One.java
package main;
import main.Four;
public class One {}
class Three {}

// Two.java
package main;
import main.Three;
public class Two {}
class Four {}

最佳答案

javac 编译器可以将多个源文件编译在一起,这使其能够处理循环依赖。

例如:

$ javac main/One.java main/Two.java

$ javac main/*.java

如果你以最后一个例子为例,一次只做一个文件,那么它注定会失败,因为你最终会遇到先有鸡还是先有蛋的问题,这意味着每个文件都需要另一个文件已经编译。

当您在 ant 中针对源目录使用该任务时,它会扫描该目录以查找所有 .java 源文件,并将它们一起传递到 Java 编译器的一个实例中。这样,编译就可以理清依赖关系。

这两个页​​面有很好的细节:

http://www.dummies.com/how-to/content/how-to-use-the-javac-command.html http://docs.oracle.com/javase/1.4.2/docs/tooldocs/windows/javac.html

关于java - 如何解决以另一个类命名的文件中的类的依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16886915/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com