【问题标题】:"Cannot Find Symbol" compile error“找不到符号”编译错误
【发布时间】:2011-04-23 15:09:51
【问题描述】:

我的编码经验才过去几年,所以这个问题应该很容易回答。

我写了两个接口:Class和Game。 Interface 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 文件位于同一目录中。我一直无法找到解决方案。有人有什么想法吗?

【问题讨论】:

    标签: java compiler-errors


    【解决方案1】:

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

    但是,您也有可能从 Impl 包中进行编译。为此,您需要引用您的类路径,以便编译器可以从包结构的基础中找到类。您可以在类名之前将-classpath .. arg 添加到您的javac

    javac -classpath .. Class.java
    

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

    javac Impl\Class.java
    

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

    【讨论】:

    • 谢谢。这完全解决了我的问题。我原以为这是一个编码问题。
    • Jay,我看到你是 StackOverflow 的新人(欢迎!)。如果它解决了您的问题,请“接受”akf 的解决方案。您接受的答案越多,将来人们就越愿意回答您的问题。
    【解决方案2】:

    您需要阅读 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 的类发生冲突。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-01
      • 2015-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-31
      相关资源
      最近更新 更多