使用包时,即使在同一文件夹中也找不到依赖于其他类的类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用包时,即使在同一文件夹中也找不到依赖于其他类的类相关的知识,希望对你有一定的参考价值。

我正在努力创造包裹。我试图在它上面跟着三到四个不同的资源,再加上一些SO线程,并且找不到明确定义什么地方或为什么根本找不到的东西。我已将包中的所有文件放在其对应的文件夹中,并尝试将它们放在根文件夹中,但无济于事。到目前为止,只要我使用package关键字打包它们,我就可以编译完全不依赖于其他类的类。

这将是我的一个包:

  • StateMachine
  • Facility延伸StateMachine
  • FacilityAI(界面)
  • FacilityBehavior延伸StateMachine实施FacilityAI
  • Control延伸StateMachine
  • TimeController

示例#1:

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

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

示例#2:

我有我的文件在其中的dataaccess文件夹,WriteFileReadFile,因为后者只是读取外部文件,它编译没有问题与javac -d . ReadFile.java,但WriteFile,使用相同的方法,找不到FacilityMachinesFacility,和属于StateMachine的州。我尝试过使用import marsmission.habcontrol.Facility;import marsmission.habcontrol.*;import marsmission.habcontrol;无济于事。

我该如何解决这个问题?

编辑:

对于示例#2,我刚认为当我编译StateMachine时,它的所有依赖项都已编译。所以我只需编译它们,然后就可以了。我还必须对未被声明的构造函数做一些更改,也没有public,也没有private,并且不知道如果它们只是声明没有定义的访问权限,它们立即被制作成private。希望这可以帮助!

答案

在根目录中,您具有subdir 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

这将找到其他类文件,甚至可以编译所有dependend Java文件。

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

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

以上是关于使用包时,即使在同一文件夹中也找不到依赖于其他类的类的主要内容,如果未能解决你的问题,请参考以下文章

即使已安装,在 Docker 容器中也找不到“json-server”命令

即使存在,诗歌也找不到依赖的版本

ionic 3 - 错误在 Android Studio 中也找不到安装的 Gradle 版本

即使已安装 Composer 也找不到 ext-mbstring

即使文件存在,Composer 也找不到 composer.json 文件

即使我使用 DB_CLOSE_DELAY=-1 报告 H2 内存数据库也找不到表