HOWTO · Java
Java: Compilerdiagnose `.class expected`
Die Compilerdiagnose `.class expected` in Java verstehen: Erfahren Sie, warum das Argument `sorting[]` ungültig ist und wie Sie den Aufruf korrigieren.
Auf dieser Seite
Die Diagnose .class expected des Java-Compilers bedeutet nicht, dass Sie in jede markierte Zeile ein .class-Literal einfügen sollten. Ihre Bedeutung hängt vom Quellcodekontext ab. Im folgenden Beispiel liegt das Problem im Argument sorting[]: Java erlaubt [] in einem Arraytyp wie int[], doch der an eine Methode übergebene Ausdruck ist die bereits vorhandene Variable sorting.
Was bedeutet der Fehler .class expected?
Dies ist eine Diagnose zur Kompilierzeit. Der Compiler meldet sie beim Parsen oder Kompilieren des Quellcodes, bevor das Programm ausgeführt werden kann. Eine Compiler-Meldung enthält häufig eine Quellcodezeile und eine Markierung nahe der Stelle, an der das Parsen abgebrochen wurde. Diese Stelle ist ein nützlicher Anhaltspunkt, auch wenn der eigentliche Fehler unmittelbar davor liegen kann, etwa eine unerwartete Klammer oder ein fehlendes Trennzeichen.
Die Meldung .class expected beschreibt, was der Compiler im jeweiligen Parsing-Kontext erwartet hat. Sie weist weder auf eine allgemeingültige Ursache hin noch bedeutet sie, dass jeder Java-Syntaxfehler diese Diagnose auslöst. Hier geht es um ein Arrayargument für Arrays.sort: Die Variable bezeichnet bereits einen Arraywert, daher ist es keine gültige Ausdruckssyntax, leere Klammern an sie anzuhängen.
Den Fehler mit sorting[] reproduzieren
Der Ausdruck sorting[] ist der entscheidende Teil. In einer Deklaration gehören die Klammern in int[] sorting zum Arraytyp. In einem Methodenaufruf verweist sorting auf das Arrayobjekt. Die Klammern bedeuten weder, dass der Arraytyp übergeben werden soll, noch dass dadurch ein neues Array entsteht.
Dieser Aufruf enthält beispielsweise den Fehler: Arrays.sort(sorting[]);. Die angegebene Compilerdiagnose lautet .class expected; der genaue Wortlaut und die Zeilennummern können je nach Java-Compiler-Version und umgebendem Quellcode variieren. Entscheidend ist, dass die Markierung auf das ungültige Argument zeigt. Ein dort eingefügtes .class würde den Ausdruck verändern und das Array nicht sortieren.
Das Arrayargument korrigieren
Übergeben Sie die Arrayvariable selbst: Arrays.sort(sorting);. Das folgende vollständige Programm zeigt die korrigierte Form. Es verwendet ein lokales Array, sortiert es direkt und formatiert die Werte für die Ausgabe.
Führen Sie dieses Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] sorting = {3, 1, 2};
Arrays.sort(sorting);
System.out.println(Arrays.toString(sorting));
}
}
[1, 2, 3]
Arrays.sort nimmt den Arraywert entgegen, und dieselbe Variable verweist anschließend auf das sortierte Array. Die entscheidende Korrektur besteht darin, das abschließende [] aus dem Argument zu entfernen – nicht die Arraydeklaration zu ändern oder ein Klassenliteral hinzuzufügen.
Auch ein leeres Array ist für diese Überladung ein gültiges Argument. Dieses korrigierte Beispiel wurde erfolgreich ausgeführt und gab eine leere Liste aus:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] sorting = {};
Arrays.sort(sorting);
System.out.println(Arrays.toString(sorting));
}
}
[]
Derselbe Aufruf akzeptiert die Arrayvariable auch dann, wenn sie keine Elemente enthält. In der Deklaration steht weiterhin int[]; das Methodenargument bleibt sorting.
Die Compilerposition untersuchen
Wenn die Diagnose erscheint, gehen Sie kurz und systematisch vor:
- Lesen Sie die vollständige Compiler-Meldung und notieren Sie Datei, Zeile und Markierung. Betrachten Sie die Markierung als Ausgangspunkt, denn das Parsen kann erst nach dem ursprünglichen Tippfehler scheitern.
- Prüfen Sie diese Zeile und die unmittelbar davor. Kontrollieren Sie, ob eckige und runde Klammern, Kommas und Semikolons zum umgebenden Ausdruck passen.
- Stellen Sie fest, ob der Code einen Typ deklariert oder einen Wert verwendet.
int[] sortingist eine Deklaration;Arrays.sort(sorting)ist ein Methodenaufruf, der die Variable verwendet. - Vergleichen Sie den Ausdruck mit dem erwarteten Methodenargument. In diesem Beispiel erhält
Arrays.sortdie Arrayreferenz, nicht eine Klammernotation hinter der Variable. - Kompilieren Sie den Code nach der Änderung erneut und lesen Sie eine gegebenenfalls neue Diagnose. Beheben Sie den zuerst gemeldeten Fehler und wiederholen Sie die Prüfung; ein Syntaxfehler kann einen späteren Fehler verdecken.
Schließen Sie nicht ohne Belege aus der Compilerposition und dem Quellcode darauf, dass eine zusätzliche geschweifte Klammer, eine falsch platzierte Methode, ein Import oder ein nicht passender Dateiname genau diese Meldung verursacht hat. Solche Probleme können andere Compilerfehler auslösen. Richten Sie die Untersuchung am konkreten Quellcode und an der Meldung aus, statt pauschal eine .class-Lösung anzuwenden.
Das korrigierte Programm überprüfen
Ändern Sie das Argument zu sorting, kompilieren Sie den Quellcode und führen Sie die Klasse mit den für Ihr Projekt und das installierte JDK passenden Befehlen aus. Der Sortieraufruf verändert das Array direkt; Arrays.toString wandelt seine Elemente in lesbaren Text um. Die bereitgestellten Ausführungsnachweise bestätigen, dass beide korrigierten Beispiele erfolgreich liefen: Für das befüllte Array wurde [1, 2, 3] ausgegeben, für das leere Array []. Diese Nachweise gelten nur für die korrigierten Aufrufe; sie belegen nicht, dass der fehlerhafte Aufruf sorting[] ausgeführt wurde.
Falls dieselbe Diagnose weiterhin erscheint, vergewissern Sie sich, dass die bearbeitete Datei tatsächlich kompiliert wird und die gemeldete Zeile mit dem aktuellen Quellcode übereinstimmt. Prüfen Sie anschließend die benachbarte Zeichensetzung und den vollständigen Aufruf einschließlich der öffnenden und schließenden runden Klammer. Wortlaut der Compiler-Meldung und Zeilenangaben können je nach Version abweichen. Verwenden Sie sie deshalb gemeinsam mit dem Quellcode und verlassen Sie sich nicht allein auf die Meldung. Für das gezeigte Problem bleibt die Korrektur konkret: Deklarieren Sie das Array mit [] im Typ und übergeben Sie anschließend die Arrayvariable als sorting.