Globale (semi-finale) Varibalen

Luk10

Top Contributor
Grüße,

ich brauche für mein Programm gloable Variablen, die von jeder Klasse ohne Referenzierung zugänglich sein müssen. Diese sollen zu einem Punkt in meinem Programm gesetzt werden und dürfen dann nicht mehr verändert werden. Welchen Wert die Variablen haben steht aber leider erst zur Runtime fest und der Punkt ist nicht während des Klassen-Ladens was
Code:
public static final
Variablen ausschließt.

Momentan lasse ich einfach das
Code:
final
weg, aber habe da ein ganz ganz ungutes Gefühl weil das Programm sicher crashed wenn die Variablen nach einmaligem setzten nochmal geändert werden.

Ich denke jetzt schon eine Weile drüber nach und kann keine Lösung finden ... Kann mir jemand von euch vielleicht weiterhelfen?

Danke!
 
H

hüteüberhüte

Gast
Klasse bauen, die das Setzen eines Werts nur einmal erlaubt. Edit:

Java:
public final class ImmutableClazz {

    private int value = -1;
    private boolean changed = false;

    public boolean setValue(int value) {
        if (changed) {
            return false;
        }
        this.value = value;
        changed = true;
        return true;
    }

    public int getValue() {
        return value;
    }
}

Java:
public static final ImmutableClazz IC = new ImmutableClazz();
 
Zuletzt bearbeitet von einem Moderator:

Luk10

Top Contributor
Wie vermeide ich denn, dass sie zwar public gelesen werden können, aber nicht geschrieben ohne "final".

In den Sinn kommt mir ein Singleton, dass mit init(...) nonstatic Variablen bekommt die nur mit gettern (ohne setter) gelesen werden können ... Hört sich kompliziert und nicht schön an
 
H

hüteüberhüte

Gast
Siehe meinen Edit oben. Sobald der Wert einmal gesetzt wurde, lässt er sich nicht mehr ändern, und es ist auch von überall darauf zugreifbar
 

Luk10

Top Contributor
Schöner als ein Singleton ... wenn sich hier nichts besseres vorgeschlagen wird, nehme ich das doch glatt ...

Danke, bin aber auch noch offen für andere Ideen!
 
H

hüteüberhüte

Gast
Naja, wenn es sich ausschließlich nur um einen Wert handelt, wäre vielleicht auch eine nicht-instantiierbare Klasse möglich:
Java:
public final class ImmutableClazz {

    private static int value = -1;
    private static boolean changed = false;

    private ImmutableClazz() {
    }

    public static boolean setValue(int value) {
        if (changed) {
            return false;
        }
        ImmutableClazz.value = value;
        changed = true;
        return true;
    }

    public static int getValue() {
        return value;
    }
}
Java:
System.out.println(ImmutableClazz.getValue());
ImmutableClazz.setValue(7);
System.out.println(ImmutableClazz.getValue());
ImmutableClazz.setValue(8);
System.out.println(ImmutableClazz.getValue());
Code:
-1
7
7
Ist aber irgendwie auch nicht so praktisch, falls hinterher ein zweiter Wert benötigt wird. Vielleicht haben die anderen ja noch Vorschläge
 
Zuletzt bearbeitet von einem Moderator:
M

maki

Gast
public static schreit geradezu nach einem unsauberen Konzept imho, zumindest für OOSprachen.

Was wäre den so schlimm an einem Objekt?
 

Marco13

Top Contributor
Abgesehen davon, dass das "Global" bei mir immer das Hochziehen von mindestens zwei Augenbrauen auslöst, ist mir das genaue Verwendungsmuster nicht ganz klar. Wer hat die Kompetenz, den Wert zu setzen? Unter welchen Bedingungen? Kann das nicht schon durch geeignete Sichtbarkeit sichergestellt werden? Dass die set-Methode einfach 'default' Sichtbarkeit hat, und der getter public ist? Dann dürfte nur jemand im gleichen Package den Wert ändern, und wenn DER Mist macht, hat der Entwickler einen Fehler gemacht...
 
H

Hüte

Gast
public static schreit geradezu nach einem unsauberen Konzept imho, zumindest für OOSprachen.

Was wäre den so schlimm an einem Objekt?

Dann ist erstere Variante ("semi"-immutable object) doch besser

@Marco13: Natürlich ist es ein Problem, wer den Wert setzen darf und wer net. Aber mir fällt auch kein besseres Konzept ein. Evtl. müsste man auch über Threadsicherheit nachdenken, aber dafür kennt man von der Anwedung zu wenig
 
S

Spacerat

Gast
Also so ganz sauber ist das alles nicht. Wenn man genauer wüsste um was es geht, könnte man evtl. einen komplett anderen Ansatz auswalzen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Globale Objekte Java Basics - Anfänger-Themen 2
T Globale Variable mehrmals verwenden Java Basics - Anfänger-Themen 7
Traxter Globale Variable ? Java Basics - Anfänger-Themen 11
Jackii Globale Variable aus anderer Klasse ändern... Java Basics - Anfänger-Themen 4
S Vererbung/Globale Variablen Java Basics - Anfänger-Themen 8
M Variablen Globale Variable? Java Basics - Anfänger-Themen 4
U Globale Proxy Einstellungen ändern Java Basics - Anfänger-Themen 3
B Globale vector? Java Basics - Anfänger-Themen 7
C lokale Variable verwenden statt globale Java Basics - Anfänger-Themen 7
B Methoden Globale Methoden "Toolbox" Java Basics - Anfänger-Themen 3
D globale Variablen zur Laufzeit erzeugen Java Basics - Anfänger-Themen 5
S globale Variable deklarieren Java Basics - Anfänger-Themen 10
E Globale int Variable? Java Basics - Anfänger-Themen 6
K Datentypen Globale Variable direkt initialisieren oder im Konstruktor? Java Basics - Anfänger-Themen 13
G Globale Variablen Java Basics - Anfänger-Themen 9
T Globale Variable wird nicht gefunden Java Basics - Anfänger-Themen 6
G Globale Variablen Java Basics - Anfänger-Themen 3
T Globale Variable (Font) Java Basics - Anfänger-Themen 21
O globale variablen Java Basics - Anfänger-Themen 21
M Globale Variablen werden durch KeyListener nicht aktualisier Java Basics - Anfänger-Themen 10
G Müssen globale Funktionen immer "static" sein? Java Basics - Anfänger-Themen 13
A Globale Variable änderbar Java Basics - Anfänger-Themen 3
A Globale Methode ohne imports und übergeben? Java Basics - Anfänger-Themen 2
P textfarbe,textgröße, textart als globale einstellung Java Basics - Anfänger-Themen 7
F Globale Variablen wie in C++? Java Basics - Anfänger-Themen 5
J "Globale Variablen" Java Basics - Anfänger-Themen 26
S globale Variablen Java Basics - Anfänger-Themen 9
D Globale Klassenvariablen. Java Basics - Anfänger-Themen 12
P Globale und ständige Überwachung eines Textfeldes auf text? Java Basics - Anfänger-Themen 40
M Superglobale globale Variable? Java Basics - Anfänger-Themen 10
P Globale Variable Java Basics - Anfänger-Themen 3
J Globale Variablen Java Basics - Anfänger-Themen 3
D Globale Variablen Java Basics - Anfänger-Themen 31
C Globale Variablen und Array mit verschiedenen Typen Java Basics - Anfänger-Themen 3
S globale Variablen Java Basics - Anfänger-Themen 7
J "globale" variable definieren? Java Basics - Anfänger-Themen 7
S Globale Variable / Methode Java Basics - Anfänger-Themen 5
E 2 Probleme - Datum & private finale Variablen Java Basics - Anfänger-Themen 5
K Wieso muss man finale statische Variablen sofort oder eben im Konstruktor initialisieren? Java Basics - Anfänger-Themen 2
N finale Attribute in abstrakten Basisklassen Java Basics - Anfänger-Themen 6
C Datentypen finale Variablen Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben