使用包时,即使在同一文件夹中也找不到依赖于其他类的类
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 symbol
的Facility
错误。在我尝试将它们放在包之前不存在的错误。
示例#2:
我有我的文件在其中的dataaccess文件夹,WriteFile
和ReadFile
,因为后者只是读取外部文件,它编译没有问题与javac -d . ReadFile.java
,但WriteFile
,使用相同的方法,找不到FacilityMachines
,Facility
,和属于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