B
ben33
Gast
ich hab hier ein kleines problem, bei dem ich nicht ganz mitkomme. das kompilieren einer klasse (siehe unten) mit dem befehl "javac Test.java" erzeugt 3 dateien:
Test.class
Test$1.class
Test$State.class
die datei Test$1.class scheint auf dem ersten blick eine annonyme klasse zu sein, es ist aber mit ziemlicher sicherheit der switch block, denn wenn ich diesen entferne, wird jene datei nicht erzeugt. eclipse hingegen erzeugt sowohl in eigenen bin verzeichnis als auch beim jar export nur die beiden dateien "Test.class" und "Test$State.class". und genau DAS will ich vom javac compiler auch.
warum also lagert javac den switch block in eine eigene class datei aus und wie kann ich das verhindern? was macht eclipse anders?
Test.java
Test.class
Test$1.class
Test$State.class
die datei Test$1.class scheint auf dem ersten blick eine annonyme klasse zu sein, es ist aber mit ziemlicher sicherheit der switch block, denn wenn ich diesen entferne, wird jene datei nicht erzeugt. eclipse hingegen erzeugt sowohl in eigenen bin verzeichnis als auch beim jar export nur die beiden dateien "Test.class" und "Test$State.class". und genau DAS will ich vom javac compiler auch.
warum also lagert javac den switch block in eine eigene class datei aus und wie kann ich das verhindern? was macht eclipse anders?
Test.java
Java:
public class Test implements Runnable {
private State state;
public Test() {
this.state = State.NEW;
}
public void run() {
loop: while (true) {
switch (this.state) {
case NEW:
this.initialize();
break;
case S1:
this.processState1();
break;
case S2:
this.processState2();
break;
case S3:
this.processState3();
break;
case FINISHED:
this.finish();
break loop;
}
}
}
public void initialize() {
System.out.println("initialize");
this.state = State.S1;
}
public void processState1() {
System.out.println("state1");
this.state = State.S2;
}
public void processState2() {
System.out.println("state2");
this.state = State.S3;
}
public void processState3() {
System.out.println("state3");
this.state = State.FINISHED;
}
public void finish() {
System.out.println("finish");
}
public static void main(String[] args) {
new Thread(new Test()).start();
}
public enum State {
NEW,
S1,
S2,
S3,
FINISHED;
}
}
Zuletzt bearbeitet von einem Moderator: