Variablen Verständnissfrage Konstanten

tom g.

Aktives Mitglied
Hallo Forum,
ich habe hier 2 Klassen. Die erste Klasse dient als Observer
Java:
package core.launchers;

import java.util.Observer;

import models.ApplicationModelRunLevel;

public class ApplicationLaucher implements Observer{

	public void run() {
		// TODO Auto-generated method stub
		ApplicationModelRunLevel.getInstance().addObserver(this);
	}
	public void update(Observable o, Object arg) {
		// TODO Auto-generated method stub
		switch(Integer.parseInt(arg.toString())){
			case ApplicationModelRunLevel.getInstance().PRESTART:
			break;
			case ApplicationModelRunLevel.getInstance().RUN:
			break;
			case ApplicationModelRunLevel.getInstance().RELOAD:
			break;
			case ApplicationModelRunLevel.getInstance().EXIT:
			break;
			case ApplicationModelRunLevel.getInstance().EXIT_ON_ERROR:
			break;
		}
	}

}

Die 2. Klasse ist Observable
Java:
package models;

import java.util.Observable;

public class ApplicationModelRunLevel extends Observable{

	final public int PRESTART = 99;
	public final int RUN = 1;
	public final int RELOAD = 6;
	public final int EXIT = 0;
	public final int EXIT_ON_ERROR = 66;
	public int runLevel = 99;
	private static ApplicationModelRunLevel INSTANCE = new ApplicationModelRunLevel();

	protected ApplicationModelRunLevel(){
		super();
	}
	public int getRunLevel(){
		return this.runLevel;
	}

	public void setRunLevel(int _runLevel){
		this.runLevel = _runLevel;
		this.setChanged();
		this.notifyObservers(_runLevel);
	}

	public static synchronized ApplicationModelRunLevel getInstance() {
		return INSTANCE;
	}
}
In der Observer Klasse erhalte ich jetzt in der switch Methode die Fehlermeldung von Eclipse
case expressions must be constant expressions /src/core/launchers ApplicationLaucher.java line 17

Java:
Line 17 ist case ApplicationModelRunLevel.getInstance().PRESTART:
Die Fehler kommen auch in den anderen cases.
Warum wird nicht erkannt, das z.B. ApplicationModelRunLevel.getInstance().PRESTART als final deklariert wurde?

Danke.
Tom
 
G

Gast2

Gast
Ja, da könnte Java in der Tat erkennen dass PRESTART immer Konstant ist. In der JLS steht dazu folgendes:

Compile-time constant expressions are used in case labels in switch statements (§14.11) and have a special significance for assignment conversion (§5.2).

A compile-time constant expression is an expression denoting a value of primitive type or a String that does not complete abruptly and is composed using only the following:

- Literals of primitive type and literals of type String (§3.10.5)
- Casts to primitive types and casts to type String
- The unary operators +, -, ~, and ! (but not ++ or --)
- The multiplicative operators *, /, and %
- The additive operators + and -
- The shift operators <<, >>, and >>>
- The relational operators <, <=, >, and >= (but not instanceof)
- The equality operators == and !=
- The bitwise and logical operators &, ^, and |
- The conditional-and operator && and the conditional-or operator ||
- The ternary conditional operator ? :
- Parenthesized expressions whose contained expression is a constant expression.
- Simple names that refer to constant variables (§4.12.4).
- Qualified names of the form TypeName . Identifier that refer to constant variables (§4.12.4).

Solche Aufrufe die du da gemacht hast sind also erstmal nicht gültig. Das kannst du aber relativ einfach umgehen.
Mach die Konstanten static und greif so drauf zu:
Code:
ApplicationModelRunLevel.PRESTART

EDIT:
Kleiner Flüchtigkeitsfehler korrigiert, danke ;)
 
Zuletzt bearbeitet von einem Moderator:

Xeonkryptos

Bekanntes Mitglied
Solche Aufrufe die du da gemacht hast sind also erstmal nicht gültig. Das kannst du aber relativ einfach umgehen.
Mach die Konstanten final und greif so drauf zu:
Code:
ApplicationModelRunLevel.PRESTART

Dann muss er die Konstanten nicht nur final, sondern auch static machen, sonst sind sie an Objekte und nicht an die Klasse gebunden.
 

tom g.

Aktives Mitglied
Hallo Ihr 2,

wie könnte ich es denn auf dem richtigen (gültigen) Weg lösen?

Worum es geht ist glaub ich klar.

Danke schon mal.
Tom
 

JimPanse

Bekanntes Mitglied
Ändere deine Konstante in Statische Konstante Variablen um:

Java:
     public static final  int PRESTART = 99;
    public static final int RUN = 1;
   ...


Aufruf:
Java:
  switch(Integer.parseInt(arg.toString())){
            case ApplicationModelRunLevel.PRESTART:
            break;
            case ApplicationModelRunLevel.RUN:
            break;
....


bzw. es macht wahrscheinlich eher Sinn die Konstanten direkt
Java:
 ApplicationLaucher
zu definieren oder du verwendest ein Enum.

Grüße
 

tom g.

Aktives Mitglied
Hallo EikeB,

Solche Aufrufe die du da gemacht hast sind also erstmal nicht gültig. Das kannst du aber relativ einfach umgehen.
Mach die Konstanten static und greif so drauf zu:
Code:
ApplicationModelRunLevel.PRESTART

sorry ich hatte es so verstanden, das man den "ungültigen" Weg umgeht. Nicht das es so gültig ist.

Danke für die Hilfe.

Tom
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Kurze Verständnissfrage Java Basics - Anfänger-Themen 4
S Verständnissfrage equals() Java Basics - Anfänger-Themen 2
E Allgemein Verständnissfrage zum Ablauf mehrerer Threads Java Basics - Anfänger-Themen 4
L OOP Verständnissfrage Java Basics - Anfänger-Themen 8
D Julia- / Mandelbrotmenge Verständnissfrage Java Basics - Anfänger-Themen 5
2 Verständnissfrage zu Libraries Java Basics - Anfänger-Themen 5
K Rekursive Funktion (Verständnissfrage) Java Basics - Anfänger-Themen 5
B Verständnissfrage synchronized Java Basics - Anfänger-Themen 2
G Verständnissfrage zu JNA Java Basics - Anfänger-Themen 15
S Verständnissfrage Java Basics - Anfänger-Themen 3
Nils_Langner JNI Verständnissfrage Java Basics - Anfänger-Themen 2
X Verständnissfrage zu Interfaces Java Basics - Anfänger-Themen 3
T Kleine Verständnissfrage Java Basics - Anfänger-Themen 7
Fats Waller Wofür stehen diese Konstanten im Java Labyrinth ? Java Basics - Anfänger-Themen 5
M Wie lassen sich Konstanten in Bedingung stellen? Java Basics - Anfänger-Themen 1
thor_norsk Symbolische Konstanten Java Basics - Anfänger-Themen 9
L Konstanten Java Basics - Anfänger-Themen 7
A SelectionSort bringt keine konstanten Ergebnisse Java Basics - Anfänger-Themen 4
F Erste Schritte Literale / Konstanten Java Basics - Anfänger-Themen 5
M Konstanten in einem Interface definieren Java Basics - Anfänger-Themen 1
M Enum: Zugriff auf Konstanten Java Basics - Anfänger-Themen 7
E wann welche Konstanten verwenden? Java Basics - Anfänger-Themen 7
Luk10 Frage zu globalen Konstanten Java Basics - Anfänger-Themen 11
S Dezimale Konstanten sind immer positiv oder null - was heisst das den genau? Java Basics - Anfänger-Themen 2
D Sind Enums typsichere Konstanten? Java Basics - Anfänger-Themen 15
M Konstanten in Java Java Basics - Anfänger-Themen 23
A Was ist performanter für Konstanten, enum oder static variablen Java Basics - Anfänger-Themen 5
C Konstanten zu einfachen Berechnungen unterhalb Main Methode Java Basics - Anfänger-Themen 19
P Klassen-konstanten durchlaufen Java Basics - Anfänger-Themen 9
S Viele Konstanten, EnumSet? Java Basics - Anfänger-Themen 3
D Frage zu Konstanten Java Basics - Anfänger-Themen 7
G static block und konstanten Java Basics - Anfänger-Themen 2
S Organisieren von Konstanten Java Basics - Anfänger-Themen 16
G Wohin mit Konstanten? Java Basics - Anfänger-Themen 12
G konstanten leicht benutzen? (sichtbarkeit) Java Basics - Anfänger-Themen 17
F Konstanten Java Basics - Anfänger-Themen 36
K System.exit() - Konstanten ? Java Basics - Anfänger-Themen 2
M Konstanten ableiten und überschreiben Java Basics - Anfänger-Themen 2
Dilandau array aus konstanten definieren? Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben