Ich bekomme eine anonyme Klasse zur Kompilierzeit, die ich nicht erwarte. Relevante Code folgt, dann eine ausführlichere Erklärung:Verweis auf Public Enum Ergebnisse in anonyme Klasse
Entirety von CircuitType.java:
public enum CircuitType { V110A20, V110A30, V208A20, V208A30 }
Von Auditor.java, Linien 3-9:
public class Auditor {
private String[] fileNames;
private int numV110A20;
private int numV110A30;
private int numV208A20;
private int numV208A30;
Von Auditor.java, Linien 104-121:
[...]
switch (newCircuit.getType()) {
case V110A20:
this.numV110A20++;
break;
case V110A30:
this.numV110A30++;
break;
case V208A20:
this.numV208A20++;
break;
case V208A30:
this.numV208A30++;
break;
default:
System.err.println("An Error Has Occured.");
System.exit(-1);
break;
}
[...]
Von Circuit.java, Zeilen 1-5:
public class Circuit {
private CircuitType myType;
public CircuitType getType() {
return this.myType;
}
[...]
Wenn der Befehl
javac *.java
ausgeführt wird, wird eine anonyme Klasse Auditor $ 1.java erzeugt. Die Dateien sitzen offensichtlich nebeneinander in einem Dateisystemverzeichnis, das nichts anderes enthält.
Wenn die Zeilen 104-121 auskommentiert sind, wird keine anonyme Klasse generiert.
Zuerst dachte ich, es war ein Paket-Problem, also legte die drei Klassen in ein Paket, aber ich wusste nicht genug über Pakete, um es zum Laufen zu bringen. Wenn es wirklich ein Paketproblem ist, kann mir jemand genau durchgehen, wie man sie beschriftet? Ich möchte sie lieber nicht verpacken, wenn es nicht nötig ist.
Der Grund für die anonyme Klasse ist neben der Tatsache, dass solche Klassen normalerweise ein Namespace-Problem darstellen, dass sie mein Makefile für die automatische Kompilierung zerstört.
aktualisieren
Beigefügt ist eine Konsolensitzung, die ich hoffe, dieses Geheimnis beleuchten kann:
% javap 'Auditor$1'
Compiled from "Auditor.java"
class Auditor$1 extends java.lang.Object{
static final int[] $SwitchMap$CircuitType;
static {};
}
Leider kann ich nicht mit dem Problem, sondern ein Posting eine sehr helfen gut gestellte Frage. –
Dies ist wahrscheinlich nicht die Antwort, die Sie hören wollten, aber 'make' ist nicht wirklich ein geeignetes Werkzeug für die Java-Entwicklung. Ich empfehle dringend, stattdessen "ant" zu verwenden. Wenn Sie komplexere Anwendungen entwickeln, werden Sie anonyme Klassen überall und zu Recht haben. –
würde mich interessieren, mehr von Auditor.java zu sehen. Basierend auf dem, was Sie hier gesagt haben, fällt es mir schwer zu glauben, dass Circuit.java das Problem ist. – Shaun