Anfängerproblem: "enum" und switch

Gismo

Grünschnabel
Hallo

Ich hab leider noch nicht viel Erfahrung mit Java. Mein Fehler ist für einen erfahrenen Programmierer vermutlich sehr simpel zu lösen :rolleyes: Ich hab folgendes Problem: 2Klassen, wobei eine nichts weiter als die "enum"-Funktion von C++ darstellt. (Das Programm ist für eine Arbeit. Die enum-Funktion von Java5 kann nicht verwendet werden).
In einer weiteren Klasse habe ich eine switch-Funktion, wobei die "case-auswahl" Memervariabeld des enum's sind. Also im Prinzip sowas:

Code:
public final class States {

	public static final int IDLE = 0;
	public static final int R = 1;
	public static final int S = 2;
}
//---------------------------------------------------------------------
public class Switch{
...
	private static final States STATUS = new States();
	private static int value = STATUS.R;
...
	switch (value)
	{
	case STATUS.IDLE:

		break;


	case STATUS.R:

		break;

	default:

		break;
	}
...
}

Ich erhalte beim compilieren immer folgenden Fehler:
Switch.java:102:constant expression required
case STATUS.IDLE
...
...
Ist das überhaupt möglich wie ich es machen will?! STATUS.IDLE müsste doch konstant sein?!

Wäre toll wenn mir da einer kurz helfen könnte! Ich finde einfach nirgends was ich falsch mache :rolleyes:
 
Hallo!

Du greifst über eine Referenz auf eine Klassenvariable zu. Diese Referenz könnte sich jedoch im laufe des Programms ändern und damit wäre die Regel für Konstante Ausdrücke innerhalb des switch Statements verletzt.

Du musst über die Klasse States auf die Klassenvariablen IDLE,R,S zugreifen, dann funktionierts.

Code:
/*
 * Created on 23.01.2005@13:26:40
 *
 * TODO Explain me...
 */
package de.tutorials;

/**
 * @author Darimont
 *
 */
public class States {
	public final static int IDLE = 0;
	public final static int R = 1;
	public final static int S = 2;
	
}

Code:
/*
 * Created on 23.01.2005@13:29:05
 *
 * TODO Explain me...
 */
package de.tutorials;

/**
 * @author Darimont
 * 
 */
public class SwitchTest {

	public static void main(String[] args) {

		int i = 2;

		switch (i) {
		case States.IDLE: {
			System.out.println("IDLE");
		}
			break;

		case States.R: {
			System.out.println("R");
		}
			break;

		case States.S: {
			System.out.println("S");
		}
			break;
		default: {
			System.out.println("default");
		}
		}
	}
}

HTH,
Gruß Tom
 
Zurück