Datentypen Problem beim Speichern von enum.

EvoLutionX

Mitglied
Hallo zusammen,
ich versuche gerade zwei Zustände über den Datentyp enum zu speichern und sitze gerade etwas auf dem Schlauch. Ich habe dazu drei Klassen. In einer soll der Zustand gesetzt werden (FXMLController), in einer gespeichert (Variables) und in der anderen abgerufen werden (ClassThree). Beim Abrufen der Variable in ClassThree bekomme ich aber als Ergebnis immer null, was ich nicht nachvollziehen kann.

Hier definiere ich die enum Variablen mit Getter- und Setter Methoden:
Java:
public class Variables {
Mode mode;
 
    public enum Mode {
    MODEONE, MODETWO
    }
   
    public void setMode(Mode mode) {
        this.mode = mode;
    }
   
    public Mode getMode(){
        return mode;
    }   
   
}

Hier speichere ich den Modus und verändere ihn einmal über einen Button-Klick:
Java:
public class FXMLDocumentController implements Initializable {

    private final Variables VARIABLES = new Variables();
    private final ClassThree classThree = new ClassThree();
   
    @FXML
    private Label label;
   
    @FXML
    private void handleButtonAction(ActionEvent event) {
        VARIABLES.setMode(Variables.Mode.MODETWO);
        classThree.showMode();
    }
   
    @Override
    public void initialize(URL url, ResourceBundle rb) {
      VARIABLES.setMode(VARIABLES.mode.MODEONE);
      System.out.println("Saved mode is: " + VARIABLES.getMode()); // "MODEONE"
    }   
   
}

Und hier möchte ich den Zustand in einer weiteren Klasse abfragen, bekomme aber als Ergebnis null:
Code:
public class ClassThree {
   
     private final Variables VARIABLES = new Variables();
    
    public void showMode(){
      System.out.println("Saved mode is: " + VARIABLES.getMode()); // "null"
    }
   
}
 

Joose

Top Contributor
Du verwendest im FXMLDocumentController und deiner ClassThree unterschiedliche Objekte der Klasse Variables.

Du musst dem Objekt der ClassThree eine Referenz auf die Variables Instanz vom FXMLDocumentController übergeben
 

EvoLutionX

Mitglied
Kannst du mir auch noch verraten wie das geht?
Wenn ich das gleiche anstatt mit enum mit boolean mache, funktioniert das indem ich in ClassThree die boolean Variable als private static definiere. Bei enum scheint das aber nicht zu funktionieren.
 

Joose

Top Contributor
boolean ist ein primitiver Datentyp und hat daher einen Defaultvalue (false). Daher kann dort nichts null sein ;)

Spendier der Klasse ClassThree einen Konstruktor und als Parameter ein Variables Objekt.
Java:
public class ClassThree {
   private Variables varObj;
   
   public ClassThree(Variables obj) {
       this.varObj = obj;
   }
   
    public void showMode() {
      System.out.println("Saved mode is: " + varObj.getMode());
    }
}
 

EvoLutionX

Mitglied
Das stimmt, aber auch wenn ich per Button-Klick die Variable auf true setze und in ClassThree aufrufe, wird dort noch true angezeigt.

Okay und wenn ich einen Konstruktor hinzugefügt habe muss ich in der FXMLController-Klasse das Objekt der ClassThree-Klasse zu:
Code:
 Variables obj;
    private final ClassThree classThree = new ClassThree(obj);
ändern um die Methode showMode() aufzurufen? Da wird ja dann als Eingabeparameter der Typ Variables gebraucht.
 

EvoLutionX

Mitglied
Noch eine Frage: Gibt es prinzipiell noch eine Möglichkeit ohne einen Konstruktor auszukommen? Z.B. von einer anderen Klasse ohne Variables-Objekt
 

Neumi5694

Top Contributor
Was du noch machen KANNST (je nach Anwendung sinnvoll oder nicht), ist ein statisches Objekt zu verwenden. Der Vorteil/Nachteil: überall in deinem Programm haben die hier gespeicherten Variablen den gleichen Wert. Das ist z.B. für Programmoptionen sinnvoll, aber nicht, wenn du mehrere Instanzens eines Objekts verwendest, die alle unterschiedliche Werte haben können (letzteres wird dadurch verhindert).
Dazu müssen (in diesem Fall) die Klassen Variables, Mode, sowie die Variable mode und deren get/set Methoden statisch sein.
Dann greifst du über
Java:
Variables.setMode(Variables.Mode.MODEONE)
zu.
ps:
1.Schreibe Variablennamen immer klein.
2. Verwende keine Variablen, um Enums zuzuweisen (Variables.mode.MODEONE), sondern immer den Verweis auf die Klasse.
3. Damit du nicht ständig auf null prüfen musst (vor allem, wenn du die statische Variante verwendest), sorge dafür, dass Variables.getMode() nie null liefert (selbst nachdem du Variables.setMode(null) ausgeführt hast - was man übrigens vom Compiler per Notation bis zu einem gewissen Grad verhindern kann). Dafür gibt es verschiedene Möglichkeiten.
 
X

Xyz1

Gast
Du hast bestimmt an so etwas gedacht:
Java:
/**
 * @author
 */
public class Beispiel {

    private static final ModeMgr m0 = new ModeMgr();

    public static void main(String[] args) {
        ModeMgr m1 = new ModeMgr();
        ModeMgr m2 = new ModeMgr(Mode.two);
        ModeMgr m3 = new ModeMgr();

        System.out.println(m0);
        System.out.println(m1);
        System.out.println(m2);
        System.out.println(m3);
    }
}

class ModeMgr {

    private static Mode mode = Mode.one;

    ModeMgr() {
    }

    ModeMgr(Mode m) {
        mode = m;
    }

    /*
    sollte static sein...
    */
    Mode getMode() {
        return mode;
    }

    /*
    sollte static sein...
    */
    void setMode(Mode mode) {
        ModeMgr.mode = mode;
    }

    @Override
    public String toString() {
        return "ModeMgr{" + "mode=" + mode + '}';
    }
}

enum Mode {
    one, two;
}

Dann noch gleich dazu:
get/set sollte static sein,
get/set sollte sync sein,
ModeMgr sollte Singleton sein,
ModeMgr sollte Threadsave sein,
Variable ModeMgr sollte Konstante und großgeschrieben sein,
enum-Konstanten kann man so oder so schreiben (es streiten sich die Gelehrten),
ModeMgr sollte "persistierbar" sein!

Und noch die Ausgabe, falls es interessieren sollte:
ModeMgr{mode=two}
ModeMgr{mode=two}
ModeMgr{mode=two}
ModeMgr{mode=two}

Was möchtest du da eigentlich machen?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Problem beim Speichern von Objekten in einer Datei Java Basics - Anfänger-Themen 7
C Methoden Problem beim Speichern von Variablen Java Basics - Anfänger-Themen 1
S Problem beim Speichern und Laden von Daten Java Basics - Anfänger-Themen 13
4 OOP Problem beim Speichern verschiedener Klassen in verschiedenen Dateien Java Basics - Anfänger-Themen 25
L Merkwürdiges Problem beim Speichern und Öffnen einer Datei Java Basics - Anfänger-Themen 3
E Webshop-Servlet: Problem beim Speichern der Bestellmenge Java Basics - Anfänger-Themen 3
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
P Problem beim Überschreiben einer vererbten Methode Java Basics - Anfänger-Themen 4
J Problem beim vergleich von zwei Integer Java Basics - Anfänger-Themen 3
S Collections funktionale Listen (ListNode<E>) review und problem beim clone Java Basics - Anfänger-Themen 0
F Problem beim entfernen von mehreren Listenelementen auf einmal (Programmierung des Spiels Arschloch) Java Basics - Anfänger-Themen 1
B Problem beim grundsätzlichen Verständnis bei Rekursion mit 2-dimensionalen Array Java Basics - Anfänger-Themen 6
A Problem beim Deklarieren von einem BOOLEAN Java Basics - Anfänger-Themen 4
B Gleicher Prozess starten und stoppen (Problem beim Stoppen) Java Basics - Anfänger-Themen 5
DestinatioN Problem beim splitten eines Satzes in Wörter und die Wörter in Buchstaben Java Basics - Anfänger-Themen 2
B Problem beim Angeben einer Eingabe Java Basics - Anfänger-Themen 12
J Encoding Problem beim Einlesen einer txt Datei mit Umlauten Java Basics - Anfänger-Themen 3
R Problem beim Wochenplan (Datum,Wochentag) Java Basics - Anfänger-Themen 30
D Problem beim umwandeln eines Strings in eine Dzezimalzahl Java Basics - Anfänger-Themen 6
A Compiler-Fehler Problem beim einbinden der applet Klasse Java Basics - Anfänger-Themen 2
L Compiler-Fehler Problem beim Programmieren eines Kalenders (java.lang.ArrayIndexOutOfBoundsException) Java Basics - Anfänger-Themen 2
C Problem beim laden eines BufferedImage Java Basics - Anfänger-Themen 2
D Problem beim Lesen einer txt-Datei Java Basics - Anfänger-Themen 8
fLooojava Bluetooth Projekt - Problem beim mehrmaligen Senden Java Basics - Anfänger-Themen 5
E Problem beim Übergeben von Parameter an Methode Java Basics - Anfänger-Themen 2
Z Problem beim Lesen und Schreiben einer Datei Java Basics - Anfänger-Themen 10
R Problem beim erstellen eines neuen Klassenobjekts Java Basics - Anfänger-Themen 2
F Input/Output Problem beim einlesen eines Strings Java Basics - Anfänger-Themen 3
J Problem beim auslesen von Int Wert aus YML-Datei Java Basics - Anfänger-Themen 6
P Problem beim Abschluss im Kompositum Java Basics - Anfänger-Themen 3
M Problem mit null pinterexception beim laden von Bildern Java Basics - Anfänger-Themen 20
K Problem beim Array aufruf Java Basics - Anfänger-Themen 4
J Problem beim ausführen in cmd.exe Java Basics - Anfänger-Themen 4
J Variablen Problem beim einlesen einer Zahl Java Basics - Anfänger-Themen 7
A Problem beim Compilieren Java Basics - Anfänger-Themen 11
J Problem beim Fenster Java Basics - Anfänger-Themen 4
tux20 Problem beim Schreiben von List to File Java Basics - Anfänger-Themen 2
M Problem beim Compilieren Java Basics - Anfänger-Themen 14
Maxim6394 Problem beim Abspielen von Sounds Java Basics - Anfänger-Themen 8
S Problem beim ersten compilieren überhaubt Java Basics - Anfänger-Themen 43
H Problem beim lesen des InputStreams von einem Subprozess Java Basics - Anfänger-Themen 4
Luk10 Problem beim .jar Datei erstellen Java Basics - Anfänger-Themen 19
L Problem beim Ausführen Java Basics - Anfänger-Themen 40
A Problem beim einfügen in eine Datenbank Java Basics - Anfänger-Themen 2
E Problem beim Programmieren eines Kartenspiels Java Basics - Anfänger-Themen 3
A Problem beim Ausführen einer .jar datei auf externen System Java Basics - Anfänger-Themen 5
M Problem beim compilieren Java Basics - Anfänger-Themen 6
JAVAnnik problem beim lvl laden Java Basics - Anfänger-Themen 15
L Problem beim Einlesen einer Datei in einen String Java Basics - Anfänger-Themen 12
W Problem beim erstellen eines Tests Java Basics - Anfänger-Themen 16
JAVAnnik Problem beim Objekt bewegen Java Basics - Anfänger-Themen 20
A Erstes Programm - Problem beim Ausführen als jar Java Basics - Anfänger-Themen 3
B Problem beim Abspielen einer Videodatei Java Basics - Anfänger-Themen 4
S Problem beim Erstellen eines Scanner-Objekts Java Basics - Anfänger-Themen 7
W Problem beim CSV-Import Java Basics - Anfänger-Themen 5
M Datentypen Problem beim zusammenstellen eines Abfrage-Strings Java Basics - Anfänger-Themen 3
K Collections Problem beim import von Packages Java Basics - Anfänger-Themen 10
S Problem beim Kompilieren - cannot find symbol - constructor() Java Basics - Anfänger-Themen 12
B Problem beim Email versenden mit Javamail Java Basics - Anfänger-Themen 5
H Problem beim Anfang von Java (Java Editor) Java Basics - Anfänger-Themen 2
I Problem beim Schreiben eines ersten Programms Java Basics - Anfänger-Themen 3
D Problem beim Zeichnen von "Das Haus vom Nikolaus" Java Basics - Anfänger-Themen 10
D Problem beim Auslesen aus File Java Basics - Anfänger-Themen 3
A Problem beim Splitten eines Strings Java Basics - Anfänger-Themen 10
S Problem mit ObjectInputStream beim Einlesen von LinkedList Java Basics - Anfänger-Themen 3
J Problem beim Löschen von elementen aus einer ArrayList Java Basics - Anfänger-Themen 5
V Problem beim Programm laden Java Basics - Anfänger-Themen 5
H Problem beim kompilieren Java Basics - Anfänger-Themen 3
C ActionListener problem beim starten von programmen Java Basics - Anfänger-Themen 3
T Problem beim Returnwert einer Methode Java Basics - Anfänger-Themen 12
M line.separator: Problem beim Lesen einer Datei Java Basics - Anfänger-Themen 11
Miladriel Problem beim Neuzeichnen nach deiconify Java Basics - Anfänger-Themen 9
R Problem beim Ausführen von Java-PGM aus der shel Java Basics - Anfänger-Themen 3
G Problem beim Sortieren einer Liste Java Basics - Anfänger-Themen 20
M Problem beim Ereignishandling mit Menü Java Basics - Anfänger-Themen 2
H problem beim zeichen im JFrame Java Basics - Anfänger-Themen 6
F Problem beim Objekteaufruf... Java Basics - Anfänger-Themen 4
E BlockChallenge: Problem beim löschen der Blöcke Java Basics - Anfänger-Themen 3
H Problem beim Verkürzen von Programm Java Basics - Anfänger-Themen 3
T Problem beim Werfen und Fangen von Exceptions Java Basics - Anfänger-Themen 2
M Problem beim Zugriff auf Daten GUI + Startklasse Java Basics - Anfänger-Themen 4
P Problem beim Thread Java Basics - Anfänger-Themen 20
0 problem beim Polygon zeichnen Java Basics - Anfänger-Themen 3
V Problem beim erstellen eines ausführbaren Programs Java Basics - Anfänger-Themen 5
0 Problem beim Starten des Applets Java Basics - Anfänger-Themen 2
N Problem beim Durchsuchen einer LinkedList Java Basics - Anfänger-Themen 5
G Problem beim Programmieren von Blackjack Java Basics - Anfänger-Themen 15
R Problem beim Laden eines Images Java Basics - Anfänger-Themen 7
K Problem beim installieren des JDK 1.6+ version Java Basics - Anfänger-Themen 3
T Problem beim Konsolenstart Java Basics - Anfänger-Themen 5
C Problem beim Berechnen der Quadratwurzel Java Basics - Anfänger-Themen 3
C Problem beim nutzen von Teilprogrammen in main Java Basics - Anfänger-Themen 2
M Problem beim Zeichnen Java Basics - Anfänger-Themen 5
D Problem beim Kompilieren Java Basics - Anfänger-Themen 4
D Problem beim auslesen von TextArea Java Basics - Anfänger-Themen 3
G Problem beim Schreiben in Textdatei Java Basics - Anfänger-Themen 9
F ggT finden - problem beim qc Java Basics - Anfänger-Themen 4
S Problem mit url, inputStream und bytes beim Quellcode laden. Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben