为什么 Java 编译器不能从另一个文件中找到 class?
Why doesn't Java compiler find class from another file?
所以,Main.java 从 House.java 调用 class House ,House.class 的方法之一应该从 class Appointment extends Succession 调用方法, 位于 Succession.java.
但由于某种原因,编译器没有找到 Appointment
并假定它一定是一个缺失变量,为什么?如果我将 Appointment-class 移动到 Main.java 或给它自己的文件,编译器会找到它。
我问这个是因为,我尝试重新创建错误,但我无法...
House.java:
public void succession(){
if (this.kinsmen.size() > 0){
Appointment.callHeir(this.head, Main.human.get(1));
Succession.java:
class Appointment extends Succession {
public static boolean callHeir(Human appointer, Human appointed){
错误:
error: cannot find symbol
Appointment.callHeir(this.head, Main.human.get(1));
^
symbol: variable Appointment
location: class House
编辑最小化的完整代码:
Main.java:
class Main {
public static void main(String[] args) {
House.succession();
}
}
House.java:
public class House {
public static void succession() {
Appointment.callHeir();
}
}
Succession.java:
class Succession{
}
class Appointment extends Succession {
public static void callHeir(){
}
}
我不确定,但这可能是原因:
编译Main.java
时遇到House.succession()
.
它没有找到 House.class
所以它寻找并编译 House.java
.
编译House.java
时遇到Appointment.callHeir()
.
它没有找到 Appointment.class
,所以它会寻找不存在的 Appointment.java
。
当我这样改House.java
的时候
public class House {
public static void succession() {
Succession dummy;
Appointment.callHeir();
}
}
一切正常。
这是因为它首先遇到 Succession dummy
,这使得编译器寻找 Succession.java
。编译该文件,我们自动获得 Appointment.class
.
正如其他人已经建议的那样,我强烈建议将 Appointment
class 放在自己的文件中。
将约会 class 的访问 Modifier/specifier 设置为 public
。
因为默认情况下任何 class 的访问 modifier/specifier 是 default
,这不允许从另一个 class.
访问 class
确保如果您需要从 class 外部访问 class,class 的访问 modifier/specifier 将是 public。
所以,Main.java 从 House.java 调用 class House ,House.class 的方法之一应该从 class Appointment extends Succession 调用方法, 位于 Succession.java.
但由于某种原因,编译器没有找到 Appointment
并假定它一定是一个缺失变量,为什么?如果我将 Appointment-class 移动到 Main.java 或给它自己的文件,编译器会找到它。
我问这个是因为,我尝试重新创建错误,但我无法...
House.java:
public void succession(){
if (this.kinsmen.size() > 0){
Appointment.callHeir(this.head, Main.human.get(1));
Succession.java:
class Appointment extends Succession {
public static boolean callHeir(Human appointer, Human appointed){
错误:
error: cannot find symbol
Appointment.callHeir(this.head, Main.human.get(1));
^
symbol: variable Appointment
location: class House
编辑最小化的完整代码:
Main.java:
class Main {
public static void main(String[] args) {
House.succession();
}
}
House.java:
public class House {
public static void succession() {
Appointment.callHeir();
}
}
Succession.java:
class Succession{
}
class Appointment extends Succession {
public static void callHeir(){
}
}
我不确定,但这可能是原因:
编译Main.java
时遇到House.succession()
.
它没有找到 House.class
所以它寻找并编译 House.java
.
编译House.java
时遇到Appointment.callHeir()
.
它没有找到 Appointment.class
,所以它会寻找不存在的 Appointment.java
。
当我这样改House.java
的时候
public class House {
public static void succession() {
Succession dummy;
Appointment.callHeir();
}
}
一切正常。
这是因为它首先遇到 Succession dummy
,这使得编译器寻找 Succession.java
。编译该文件,我们自动获得 Appointment.class
.
正如其他人已经建议的那样,我强烈建议将 Appointment
class 放在自己的文件中。
将约会 class 的访问 Modifier/specifier 设置为 public
。
因为默认情况下任何 class 的访问 modifier/specifier 是 default
,这不允许从另一个 class.
确保如果您需要从 class 外部访问 class,class 的访问 modifier/specifier 将是 public。