gpt4 book ai didi

java - 使用包时,找不到依赖于另一个的类,即使在同一个文件夹中

转载 作者:行者123 更新时间:2023-11-30 10:06:05 24 4
gpt4 key购买 nike

我在创建包方面费了很大力气。我试图在上面跟踪三四个不同的资源,加上一些 SO 线程,但找不到关于什么去哪里或为什么根本找不到东西的明确定义。我已经将包中的所有文件放在它们对应的文件夹中,也试图让它们放在根文件夹中,但无济于事。到目前为止,每当我使用 package 关键字打包它们时,我都可以编译完全不依赖于其他类的类。

这将是我的包裹之一:

  • 状态机
  • Facility 扩展 StateMachine
  • FacilityAI(接口(interface))
  • FacilityBehavior 扩展 StateMachine 实现 FacilityAI
  • Control 扩展 StateMachine
  • 时间 Controller

示例#1:

这里最松散耦合的是 TimeController,我可以使用 javac -d 从项目的根文件夹编译这个没有问题。时间 Controller .java。它创建一个文件夹 marsmission,然后在其中创建 HabControl,并将 class 文件放在 HabControl 中。

现在,StateMachine 使用 FacilityFacility 对象中设置状态。但是,当我尝试从根文件夹编译时,我得到一个指向 Facilitycannot find symbol 错误。在我尝试将它们放在包上之前不存在的错误。

示例 #2:

我有一个 dataaccess 文件夹,里面有我的文件,WriteFileReadFile,因为后者只读取外部文件,所以 编译没有问题javac -d 。 ReadFile.java,但是WriteFile,用同样的方法,找不到FacilityMachinesFacility,以及属于的状态到 StateMachine。我试过使用 import marsmission.habcontrol.Facility;import marsmission.habcontrol.*;import marsmission.habcontrol; 到 no有用。

我该如何解决?

编辑:

对于示例 #2,我假设在编译 StateMachine 时,它的所有依赖项也都已编译。所以我只需要编译它们,然后它就可以工作了。我还必须对既未声明也未声明 publicprivate 的构造函数进行一些更改,并且不知道如果它们只是在没有定义访问权限的情况下被声明立即设为 private。希望这对您有所帮助!

最佳答案

在您的根目录中,您有子目录 marsmission,其中有子目录 HabControl。在 HabControl 内部驻留了您的 Java 文件 TimeController.java、StateMachine.java 等。所有这些 Java 文件都有这样的包声明:

package marsmission.HabControl;

然后使用命令行进入根目录并键入:

javac -d . marsmission/HabControl/TimeController.java

之后在TimeController.java同级目录下有一个类文件TimeController.class。

然后

javac -d . marsmission/HabControl/StateMachine.java

这将找到其他类文件,甚至编译所有依赖的 Java 文件。

在了解了 javac 的工作原理后,您应该考虑使用 Ant、Maven 或 Gradle 等构建工具。

另外,按照惯例,Java 中的包名都是小写的。

关于java - 使用包时,找不到依赖于另一个的类,即使在同一个文件夹中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54845101/

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