"Cannot Find Symbol" 编译错误

6

我的编程经验仅有几年,所以这个问题应该很容易回答。

我写了两个接口: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类已经编译完成,class文件与两个java文件在同一目录下。我一直无法找到解决方法。有人有什么想法吗?

2个回答

8

类名区分大小写。可能你已经创建了一个名为game的接口,但是在你的Class接口声明中却将其引用为Game,这会导致编译器找不到。

然而,还有另一种可能是你正在Impl包内编译。为了做到这一点,你需要引用你的类路径,以便编译器可以找到从包结构的基础上的类。在类名之前,你可以在javac命令中添加一个-classpath ..参数:

javac -classpath .. Class.java

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

javac Impl\Class.java

你总是可以添加一个-classpath .来使内容更加清晰。


谢谢。这完全解决了我的问题。我一直以为是编码问题。 - Jay
7
Jay,我看到你是StackOverflow的新成员(欢迎!)。如果akf的解决方案解决了你的问题,请点击“接受答案”。你接受的答案越多,未来愿意回答你问题的人也就越多。 - AndyG

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的类发生冲突。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接