2010-10-11 20 views
6

Mi experiencia de codificación solo se remonta a algunos años, por lo que esta pregunta debería ser lo suficientemente fácil de responder.Error de compilación "No se puede encontrar el símbolo"

He escrito dos interfaces: clase y juego. Se supone que Interface CLASS amplía la interfaz GAME.

Estas son las fuentes de dos interfaces:

package Impl; 

public interface Game 
{ 
    //METHODS AND VARS 
} 


package Impl;  

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

Ahora, cuando intento compilar la segunda interfaz, me sale el siguiente error

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

se compila Mi clase de juego y el archivo de clase está en el mismo directorio que ambos archivos java. No he podido encontrar una solución. ¿Alguien tiene alguna idea?

Respuesta

8

Los nombres de las clases distinguen mayúsculas de minúsculas. Es posible que haya creado una interfaz llamada game, pero se refiere a ella en su declaración de interfaz Class como Game, que el compilador no puede encontrar.

Sin embargo, hay otra posibilidad de que esté compilando dentro de su paquete Impl. Para hacer esto, necesitará hacer referencia a su ruta de clases de modo que el compilador pueda encontrar clases desde la base de la estructura del paquete. Se puede añadir un arg -classpath .. a su javac antes de que el nombre de la clase:

javac -classpath .. Class.java 

Como alternativa, puede hacer lo que es más común, la compilación de la raíz de la estructura de su paquete. Para ello, tendrá que especificar la ruta al archivo de Class:

javac Impl\Class.java 

siempre se puede añadir un -classpath . ser claro.

+0

Gracias. Esto resolvió mi problema por completo. Había asumido que era un problema de codificación. – Jay

+7

Jay, veo que eres nuevo en StackOverflow (¡Bienvenido!). Acepte la solución de akf si resuelve su problema. Cuantas más respuestas haya aceptado, más dispuestos estarán las personas a responder sus preguntas en el futuro. – AndyG

6

Necesita leer sobre cómo funcionan los classpaths de Java y cómo debe organizar su código fuente. Básicamente, su problema es que cuando el compilador javac compila "Class.java", no espera encontrar "Game.class" en el directorio actual. Lo (probablemente) lo está buscando en "Impl/Game.class".

"Managing the Java classpath" La página de IBM proporciona una discusión a fondo de cómo establecer la ruta de clases de Java y cómo los servicios públicos (por ejemplo, java y javac) usarlo para encontrar los archivos de clase. La página Oracle "Setting the Classpath" proporciona más información de forma más sucinta ... pero debe leerla detenidamente.

Por cierto, usted tiene un cierto estilo de atrocidades en el código:

  • Java nombres de paquetes deben estar en todo en minúsculas.
  • Llamar a una clase Class es una mala idea, porque esto colisiona con la clase llamada java.lang.Class que se importa por defecto.
Cuestiones relacionadas