“无法查找符号”编译错误

时间:2010-10-11 03:19:52

标签: java compiler-errors

我的编码经验只回溯了几年,所以这个问题应该很容易回答。

我写了两个接口:Class和Game。接口CLASS应该扩展接口GAME。

以下是两个界面来源:

package Impl;

public interface Game
{
    //METHODS AND VARS
}


package Impl;    

public interface Class extends Game
{
    //METHODS AND VARS
}

现在,当我尝试编译第二个接口时,出现以下错误

class.java:4: cannot find symbol
symbol: class Game
public interface Class extends Game
                               ^

我的Game类被编译,类文件与两个java文件在同一目录中。我一直无法找到解决方案。有没有人有任何想法?

2 个答案:

答案 0 :(得分:8)

类名区分大小写。您可能已创建了一个名为game的接口,但您在Class接口声明中将其称为Game,编译器无法找到它。

但是,您还可以在Impl包中进行编译。为此,您需要引用类路径,以便编译器可以从包结构的基础中查找类。您可以在课程名称前向-classpath ..添加javac arg:

javac -classpath .. Class.java

或者,您可以执行更常见的操作,从包结构的根目录进行编译。为此,您需要指定Class文件的路径:

javac Impl\Class.java

您可以随时添加-classpath .以便明确。

答案 1 :(得分:6)

您需要了解Java类路径的工作原理以及如何组织源代码。基本上,你的问题是当javac编译器编译“Class.java”时,它不希望在当前目录中找到“Game.class”。它(可能)正在“Impl / Game.class”中寻找它。

IBM“Managing the Java classpath”页面深入讨论了如何设置类路径以及java实用程序(例如javajavac)如何使用它来查找类文件。 Oracle“Setting the Classpath”页面提供了更简洁的更多信息......但您需要仔细阅读。

顺便说一下,你的代码中有一些风格暴行:

  • Java包名称应全部为小写。
  • 调用类Class是一个坏主意,因为这会与默认导入的名为java.lang.Class的类发生冲突。