所以我以为我了解包装,但事实却并非如此。
包中的类:我具有以下文件夹结构:mypackage/mysubpackage
。在mysubpackage文件夹中,我有2个类:
package mypackage.mysubpackage;
public class Class1 {...}
和
package mypackage.mysubpackage;
public class Class2 {...}
但是,当我在目录
javac Class1.java
中使用mypackage/mysubpackage
编译Class1(使用Class2中的方法)时,看不到Class2:Class1.java: error: cannot find symbol
Class2 c = new Class2();
^
symbol: class Class2
location: class Class1
如果我在包含
javac Class1.java
的目录中运行mypackage/mysubpackage
,它会很好地工作。编译不应该在mysubpackage文件夹中进行吗?另一个包中的类:现在,我有了另一个类,该类中的方法我希望所有子包都可以使用,因此我在
Commons.java
内创建了一个最终的mypackage/commons
: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
如果找不到,就不应该吗?我想我正确地导入了它,方法是静态的,类是最终的。为什么不识别它?
干杯!
最佳答案
看起来问题出在从命令行启动Java
编译器时在哪里设置工作目录。
我建议您选择一个集成的开发环境-Eclipse
is a good one。使用IDE,您不会遇到任何此类问题。这是我刚刚在Eclipse中创建的可编译相关性的类。
公地
package com.example.packagecommons;
public class Commons {
public static double method() {
return 0;}
}
1类
package com.example.packages;
public class Class1 {
private Class2 c2;
public Class1() {
c2 = new Class2();
}
}
2类
package com.example.packages;
import com.example.packagecommons.Commons;
public class Class2 {
private double initialValue;
public Class2() {
initialValue = Commons.method();
}
public double getValue() {
return initialValue;
}
}