Klassen Ungültige Objektzustände bei der Initialisierung

Bela B.

Aktives Mitglied
Hallo zusammen,

habe im Studium damals einen Einblick in Java bekommen und will das nun vertiefen. Dazu arbeite ich mich gerade durch "Der Weg zum Java-Profi" von Michael Inden. Mir sagt das Buch echt zu und da ich auch mit einem Freund von mir gerade ein aktuelles Projekt angehe, passt das als Lektüre perfekt.

Darin gibt es direkt zu Beginn auch einen Abschnitt über ungültige Objektzustände bei Initialisierung. Soweit verstehe ich das, aber tue mich gerade trotzdem etwas schwer, das in einem (simplen) Fall umzusetzen.

Für unser Programm gibt es eine config.json, die im User-Home liegt. Zu Beginn des Programms soll also diese config.json ausgelesen werden, doch was tun, wenn es sie noch gar nicht gibt?

Dafür habe ich mir mal folgende Klasse überlegt:
Java:
public class Config {
    private static final Logger LOGGER = LoggerFactory.getLogger(Config.class.getName());

    private File configFile;
    private JSONObject configEntries;

    Config() {
        this.configFile = new File(System.getProperty("user.home") + "/.msc/config.json");


        this.readConfigFile();

    }

    private void createConfigFile() throws IOException {
        this.configFile.getParentFile().mkdirs();
        this.configFile.createNewFile();
    }

    public JSONObject readConfigFile() {
        if (this.configFile.exists()) {
            JSONParser parser = new JSONParser();
            try {
                Object obj = parser.parse(new FileReader(configFile));
                this.configEntries = (JSONObject) obj;
                return this.configEntries;
            } catch (FileNotFoundException e) {
                LOGGER.info("No config.json found in {}, so creating it", configFile);
                return null;
            } catch (IOException e) {
                LOGGER.error("Error read config-JSON-File", e);
                return null;
            } catch (ParseException e) {
                LOGGER.error("Error parse config-JSON-File", e);
                return null;
            }
        }
        else {
            return null;
        }
    }

    public void writeConfigFile(String username, ...) throws IOException {
        if (!this.configFile.exists()) { this.createConfigFile();}
// hier wird dann die JSON geschrieben
    }

    public JSONObject getConfigEntries() {
        return configEntries;
    }
}

Probleme habe ich nun damit, wie ich nun den Konstruktor bastle. Ich könnte natürlich bereis alle nötigen Einträge, die in die config.json müssen direkt beim Konstruktor mitangeben, aber dann muss man die ja immer angeben, auch wenn es die Datei schon gibt.

Lasse ich es dagegen beim Konstruktor ohne Parameter, so habe ich ja ein nicht einsatzfähiges Objekt.
Wie geht man denn da in dem Fall am besten vor?
 

L0oNY

Bekanntes Mitglied
Hi,

du fängst ja schon den Fall ab, in dem es die Datei nicht gibt und schreibst das in den Log. Jetzt musst du wissen, ob die Config so wichtig ist, dass das Programm ohne die nicht weiterlaufen kann, oder kannst du die Config ersetzen/neu anlegen, wie auch immer.

Im ersteren Fall könnte ich mir eine Ausgabe wie "Die Datei ist nicht da, machen Sie was dagegen" vorstellen. Dazu muss das Programm/Vorgang wahrscheinlich auch noch beenden werden, da er nicht ohne die Datei stattfinden kann.

Wenn du die config neu anlegst, dann wahrscheinlich ohne Inhalt, somit würdest du vor dem gleichen Problem wieder stehen. Wenn du irgendwelche Werte reinschreibst, die in deinem Quellcode stehen, macht es die configdatei an sich sinnlos.

Um es kurz zu fassen: Du musst das Verhalten der Anwendung ohne die Datei festlegen.
 

Bela B.

Aktives Mitglied
Danke für die Antwort.
Die Inhalte in der Config sind Pflicht, geplant ist, wenn die Config fehlt einen Dialog zu präsentieren, bei dem man die Einstellungen setzen kann.

Habe es nochmal etwas umgebaut und gebe die Exceptions raus an die Main, dann kann ich da später die FXML mit dem Einstellungsdialog anzeigen und anschließend die Config schreiben. Denke das passt dann soweit? Oder kann man sonst noch etwas am Stil verbessern?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
m0n4ch Variablen String auf ungültige Zeichen überprüfen Java Basics - Anfänger-Themen 13
A Ungültige Eingaben: Fehler ausgeben Java Basics - Anfänger-Themen 16
H ungültige methodenaufruf Java Basics - Anfänger-Themen 16
I Programm erkennt nicht an das Array zurückgegeben wird trotz Initialisierung *einfach* Java Basics - Anfänger-Themen 9
S If Abfrage nur mit bestimmter Initialisierung? Java Basics - Anfänger-Themen 8
A OOP und Initialisierung Java Basics - Anfänger-Themen 5
J Klassen Deklaration und Initialisierung Java Basics - Anfänger-Themen 15
N Methode mit While-Schleife und If-Bedingung und Array-Initialisierung Java Basics - Anfänger-Themen 4
T Erste Schritte Frage zur Initialisierung eines Mehrdimensionalen Arrays Java Basics - Anfänger-Themen 3
R Erste Schritte Deklaration und Initialisierung von Arrays Java Basics - Anfänger-Themen 21
A Variablen Variable soll ihren Wert nach Initialisierung nicht mehr ändern Java Basics - Anfänger-Themen 2
M Interpreter-Fehler Nullpointerexception trotz Ordentlicher Initialisierung Java Basics - Anfänger-Themen 4
M Deklaration und Initialisierung bei Method Erstellung Java Basics - Anfänger-Themen 12
E Initialisierung von Attributen und Konstruktor Java Basics - Anfänger-Themen 0
F Erste Schritte Frage zur Initialisierung Java Basics - Anfänger-Themen 4
S Initialisierung von Klassenvariablen Java Basics - Anfänger-Themen 7
D Problem mit Initialisierung und Reihenfolge Java Basics - Anfänger-Themen 10
J Initialisierung Array-Liste Java Basics - Anfänger-Themen 3
S Object Initialisierung Java Basics - Anfänger-Themen 7
F Variable ohne Initialisierung in For Schleife Java Basics - Anfänger-Themen 5
B Initialisierung von Zeichenpanel Java Basics - Anfänger-Themen 3
D Datentypen Felder: Deklaration und Initialisierung Java Basics - Anfänger-Themen 5
Luk10 Saubere Initialisierung im Konstruktor Java Basics - Anfänger-Themen 4
M Variablen Initialisierung von Arrays Java Basics - Anfänger-Themen 7
K Datentypen Default Initialisierung Java Basics - Anfänger-Themen 8
P Initialisierung einer 5*5 Matrix mit best. Werten Java Basics - Anfänger-Themen 2
V Datentypen Array Initialisierung funktioniert nicht Java Basics - Anfänger-Themen 3
B Fragen zur Initialisierung/Zuweisung der Variable + Packages erstellen Java Basics - Anfänger-Themen 4
S jTree initialisierung Java Basics - Anfänger-Themen 4
G Initialisierung + alte Werte Java Basics - Anfänger-Themen 7
F "Initialisierung der VM fehlgeschlagen. res=-4 jvm is n Java Basics - Anfänger-Themen 5
P Grundsätzliches zur String-Initialisierung Java Basics - Anfänger-Themen 2
M String Initialisierung Java Basics - Anfänger-Themen 5
tobiasbeil Fehler array initialisierung. Nur erklärung bitte. Java Basics - Anfänger-Themen 2
T Unterschied Initialisierung von Klassen Java Basics - Anfänger-Themen 3
H String initialisierung Java Basics - Anfänger-Themen 9
A array nach initialisierung final machen? Java Basics - Anfänger-Themen 17
M Initialisierung Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben