Behebung von 'cannot find symbol' in Java
Problem:
You want to compile some Java source code (e.g. using Maven), but you get an error message like
[ERROR] /home/user/myproject/src/main/java/com/mydomain/myproject/Main.java:[123,40] cannot find symbol
[ERROR] symbol: class MyClassLösung
Java weiß nicht, wo es MyClass finden kann.
Überprüfe zuerst, ob du MyClass korrekt importiert hast.
Wenn MyClass in deiner Bibliothek gefunden werden kann, fehlt höchstwahrscheinlich eine Import-Anweisung am Anfang der Datei, in der der Fehler auftritt.
Wenn andererseits MyClass aus einer externen Bibliothek importiert wird, überprüfe, ob:
- Du die korrekte Version der Bibliothek hast. Möglicherweise verwendest du eine alte Version der Bibliothek, in der
MyClassnicht vorhanden ist. Dies ist oft der Fall bei der Verwendung von SNAPSHOT-Versionen in Maven, da verschiedene Entwickler möglicherweise unterschiedliche SNAPSHOTs haben, sodass einer Probleme beim Build haben könnte, während ein anderer nicht. - Du die korrekte Import-Anweisung verwendest (siehe die Dokumentation oder den Quellcode der Bibliothek, um zu überprüfen, ob du das korrekte Paket verwendest.
If you don’t know in which library you can find a certain symbol in, see our post [To be done].
Was genau sind ‘Symbole’?
Das Konzept und der Begriff eines Symbols werden in vielen verschiedenen Programmiersprachen verwendet. Basically it means ‘a name that refers to something declared somewhere else in more detail’.
Daher, wenn du auf Fehlermeldungen wie ‘cannot find symbol’ stößt, versucht der Compiler dir zu sagen: “Ich weiß nicht, worauf sich dieser Name bezieht”.
Beispiel:
Wenn du eine Klasse in Java deklarierst, z.B.
class MyClass {
/* Dein Code kommt hierhin ! */
}kannst du später auf diese Klasse mit ihrem Namen, MyClass, verweisen, z.B. in
MyClass class = new MyClass();In that line of code, MyClass is used symbolically to refer to the full class declaration (class MyClass { /* ... */}) which we listed before.
Daher wird MyClass als Symbol verwendet, um auf deine vorherige (vollständige) Deklaration von MyClass zu verweisen.
Wenn der Name MyClass jedoch keine zugehörige vollständige Deklaration hat, wird der Compiler dir ‘cannot find symbol’ mitteilen.