【发布时间】:2014-10-31 21:22:29
【问题描述】:
所以我以为我了解包,但事实证明我不了解。
-
包内的类:我有这个文件夹结构:
mypackage/mysubpackage。在 mysubpackage 文件夹中,我有 2 个类:package mypackage.mysubpackage; public class Class1 {...}
和
package mypackage.mysubpackage;
public class Class2 {...}
但是,当我在目录 mypackage/mysubpackage 中使用 javac Class1.java 编译 Class1(使用 Class2 中的方法)时,它看不到 Class2:
Class1.java: error: cannot find symbol
Class2 c = new Class2();
^
symbol: class Class2
location: class Class1
如果我在包含mypackage/mysubpackage 的目录中运行javac Class1.java,它工作正常。编译不应该在 mysubpackage 文件夹中工作吗?
-
另一个包中的类:现在,我有另一个类,其中包含我希望所有子包都可以访问的方法,所以我在
mypackage/commons中创建了一个最终的Commons.java:package mypackage.commons; public final class Commons { public static double method() {...} ... }
然后我更新 Class2 导入该类,以便我可以在类中使用它的方法:
package mypackage.mysubpackage;
import mypackage.commons.*;
public class Class2 {...}
现在它没有找到我在最终类中定义的方法:
./mypackage/mysubpackage/Class2.java: error: cannot find symbol
double var = method();
^
symbol: method method()
location: class Class2
不应该找到吗?我想我正确地导入了它,方法是静态的,类是最终的。为什么不识别?
干杯!
【问题讨论】:
-
“使用 javac Class1.java”——这是你的错误。您应该编译为“javac package/subpackage/Class1.java”。或者在 javac 上指定适当的类路径。
-
你能添加你的代码吗?
-
(类必须位于与其包对应的目录结构中的某个位置。)
-
@HotLicks 好的,这就是为什么当我在包含它们的文件夹中时它可以工作的原因。我认为它也可以在本地文件夹中工作。
-
如果你想在不命名类的情况下调用静态方法,你必须导入类,而不仅仅是包。
标签: java class static packages final