JavaFX Custom Exceptions

friednoodles

Aktives Mitglied
Hi,

ich habe eine Methode in der ich vier Verzweigungen habe, zwei davon sind für gewollte Umwandlungen und die anderen zwei sind für den Fall, das illegale Argumente eingegeben werden.

Java:
    public static String patternQuery(String toCheck) throws PatternQueryException {

        final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date parsInToDate = new Date();

        if (toCheck.isEmpty()) {
            throw new PatternQueryException("You can´t convert from nothing!");

        } else if (Pattern.matches(DATEPATTERN, toCheck)) {
            long epochMillis;
            epochMillis = dateToEpochTime(sdf, toCheck, parsInToDate);
            return epochMillis + "";

        } else if (Pattern.matches(NUMBERPATTERN, toCheck)) {
            Calendar calendar = epochTimeToDate(Long.parseLong(toCheck));
            return sdf.format(calendar.getTime());
        }

        throw new PatternQueryException("This entry is not valid!");
    }

Falls nun illegale Argumente eingegeben werden bekomme ich in der Konsole meine hier definierten Fehlermeldungen.

Meine Klasse patternQueryException sieht so aus:
Java:
public class PatternQueryException extends IllegalArgumentException {

    private static final long serialVersionUID = 8696342062082168859L;

    /**
    * Constructs an <code>patternQueryException</code> with the specified detail
    * message.
    * @param message: the detail message.
    *
    */
    public PatternQueryException(String message) {
        super(message);
    }
}

Dazu hätte ich nun ein paar Fragen:
1. Ist es möglich ist die Nachrichten irgendwie in der PatternQueryException Klasse zu definieren?
2. Kann ich für die beiden Exceptions die ich in der ersten Methode throwe auch zwei unterschiedliche Konstruktoren in meiner Exception Klasse anlegen? Mit unterschiedlichen Namen für besseres Verständnis?
3. super(message) ruft ja einen Konstruktor auf der einen Parameter vom Typ message akzeptiert. Welcher Konstruktor wird hierfür in meinem konkreten Beispiel verwendet?
4. Ist meine Vorgehensweise bisher richtig? Oder sollte ich mich noch in das Schlüsselwort
Java:
 catch
einarbeiten?
5. Warum ist die Zeile
Java:
 private static final long serialVersionUID = 8696342062082168859L;
genau notwendig?
 

Robat

Top Contributor
1. Ist es möglich ist die Nachrichten irgendwie in der PatternQueryException Klasse zu definieren?
Ja einfach als Member/Konstante der Klasse

Kann ich für die beiden Exceptions die ich in der ersten Methode throwe auch zwei unterschiedliche Konstruktoren in meiner Exception Klasse anlegen? Mit unterschiedlichen Namen für besseres Verständnis?
Konstruktoren müssen so heißen wie die Klasse. Du kannst aber mehrere Konstruktoren mit unterschiedlichen Parameterlisren anlegen
3. super(message) ruft ja einen Konstruktor auf der einen Parameter vom Typ message akzeptiert. Welcher Konstruktor wird hierfür in meinem konkreten Beispiel verwendet?
super() ruft den Konstruktor mit der passenden Parameterliste der Oberklasse (in dem Fall IllegalArgumentException) auf

4. Ist meine Vorgehensweise bisher richtig? Oder sollte ich mich noch in das Schlüsselwort
catch brauchst du hier nicht - du willst ja die Exceptions werfen und nicht behandeln

5. Warum ist die Zeile
Notwendig ist die Zeile nicht für dich. eclipse möchte das nur so haben. Wenn du wissen willst wozu man die Zeile braucht schau dir mal Serialisierung in Java an
 

mihe7

Top Contributor
Prinzipiell würde ich mir überlegen, ob ich das überhaupt per Exceptions lösen will. Falsche Benutzereingaben sind so gesehen keine Ausnahme, sondern etwas, mit dem man rechnen sollte.

Wenn man sich dann tatsächlich zu Exceptions entschließt, wäre die nächste Frage, welchen Sinn es macht, diese noch großartig nach Typ zu unterscheiden. Was habe ich von der Unterscheidung in IllegalArgumentException und PatternQueryException?

Abgesehen von diesen Überlegungen folgen ein paar Antworten auf Deine Fragen:
1. Ja, das ist z. B. per enum möglich. Du kannst in Deiner Exception-Klasse z. B. einfach einen Aufzählungstyp definieren:
Java:
public enum Reason {
    EMPTY_QUERY,  INVALID_QUERY
}
//oder auch
public enum Reason {
    EMPTY_QUERY("You can not..."),  
    INVALID_QUERY("Invalid ...");
    private String text;
    Reason(String text) { this.text = text; }
    public String getText() { return text; }
}

2. Nein. Möglich wären aber z. B. Factory-Methoden:
Java:
private PatternQueryException(String message) {
    super(message);
}

public static PatternQueryException invalidQuery() {
    return new PatternQueryException("Invalid...");
}
public static PatternQueryException emptyQuery() {
    return new PatternQueryException("You can not...");
}

Kann man natürlich mit enums kombinieren, aber da der Konstruktor hier eh private ist, kann man sich das sparen. Würdest Du den Konstruktor dagegen z. B. public machen, könnten sich enums wieder lohnen.

Im Endeffekt: alles Overkill.

3., 4. und 5. s. Antwort von @Robat
 

friednoodles

Aktives Mitglied
Was habe ich von der Unterscheidung in IllegalArgumentException und PatternQueryException?
Soweit ich das verstanden habe hat man von der Unterscheidung nichts. Bei dem Problem geht es eigentlich nur darum, dass ich verstehe wie man mit Custom Exceptions richtig umgeht.

Java:
public enum Reason {
    EMPTY_QUERY("You can not..."), 
    INVALID_QUERY("Invalid ...");
    private String text;
    Reason(String text) { this.text = text; }
    public String getText() { return text; }
}

Wie kann ich diese Enums an meine "throw new PatternQueryException" aus der Methode vom 1. Post anheften?
Egal was ich versuche, ohne Fehler akzeptiert wird nur meine eigene bisherige Methode die ich auch im ersten Beitrag schon beschrieben habe.
 

mihe7

Top Contributor
Java:
public class PatternQueryException extends Exception {
    public enum Reason {
        EMPTY_QUERY("Query was empty"),
        INVALID_QUERY("Query was invalid");

        private String text;

        Reason(String text) { this.text = text; }
        public String getText() { return text; }
    };

    private Reason reason;

    public PatternQueryException(Reason reason) {
        super(reason.getText());
        this.reason = reason;
    }

    public Reason getReason() { return reason; }
}
Java:
public class Test {
    public static void main(String[] args) {
        try {
            throw new PatternQueryException(
                    PatternQueryException.Reason.EMPTY_QUERY);
        } catch (PatternQueryException ex) {
            System.out.println("Reason was: " + ex.getReason());
        }
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Splayfer Custom Font in AttributedString Java AWT, Swing, JavaFX & SWT 4
M4cM4rco0707 JavaFX Custom-Komponente mit Custom-Controller AWT, Swing, JavaFX & SWT 3
S JavaFX Java Custom Node Grafik zurückgeben AWT, Swing, JavaFX & SWT 2
Yjuq JavaFX Custom Control - Image resize AWT, Swing, JavaFX & SWT 0
D Gluon Scene Builder Custom AWT, Swing, JavaFX & SWT 0
B JavaFX Custom TextInputControl AWT, Swing, JavaFX & SWT 1
T Custom Window ohne Swing / AWT / FX..?! AWT, Swing, JavaFX & SWT 1
F JavaFX Custom ListView erstellt ghost Element AWT, Swing, JavaFX & SWT 3
X Custom Controls AWT, Swing, JavaFX & SWT 5
T JavaFX Custom Layout AWT, Swing, JavaFX & SWT 5
L JavaFX Custom control mit Hover Effekt AWT, Swing, JavaFX & SWT 2
M Swing JColorchooser anpassen - custom style? AWT, Swing, JavaFX & SWT 0
M JavaFX Parameter für Custom Control in FXML übergeben? AWT, Swing, JavaFX & SWT 4
B Custom JTabbedPane-Tab-Design AWT, Swing, JavaFX & SWT 2
N JLabel HTML mit custom Font AWT, Swing, JavaFX & SWT 0
P Verbuggte custom JButton unter Windows AWT, Swing, JavaFX & SWT 9
G TitledPane Custom Title AWT, Swing, JavaFX & SWT 6
N Custom JButton Feld aus Parent lesen lassen AWT, Swing, JavaFX & SWT 11
V Swing Custom JToggleButton in JTable - Click-Event geht erst beim zweiten Mal AWT, Swing, JavaFX & SWT 7
lumo SWT JFace Databinding +Custom Table AWT, Swing, JavaFX & SWT 2
B Swing JTable custom ColumnModel Problem AWT, Swing, JavaFX & SWT 5
W Swing Tag Oder Custom Eintrag AWT, Swing, JavaFX & SWT 7
algorismi Custom JDesktopIcon AWT, Swing, JavaFX & SWT 5
hdi Custom Cursor: Problem mit Größe AWT, Swing, JavaFX & SWT 5
N JComboBox mit Custom Object AWT, Swing, JavaFX & SWT 2
V Frage zu JScrollPane mit Custom Headern, mit Beispiel AWT, Swing, JavaFX & SWT 2
S [S] custom tree componente AWT, Swing, JavaFX & SWT 8
Z MessageDialog mit Custom panel erstellen AWT, Swing, JavaFX & SWT 2
H Exceptions seit java: 1.6.0_65 Umstellung AWT, Swing, JavaFX & SWT 3
H JTable: Diverse NullPointer-Exceptions zur Laufzeit AWT, Swing, JavaFX & SWT 3
F JavaFX wirft zufällig Exceptions AWT, Swing, JavaFX & SWT 5
A JavaFX Sehr viele Exceptions bei Taschenrechner mit JavaFx AWT, Swing, JavaFX & SWT 2
apple_pie1998 Programm gibt plötzlich exceptions aus. AWT, Swing, JavaFX & SWT 4
F L&F Exceptions AWT, Swing, JavaFX & SWT 10
hdi Swing Frage zu invokeAndWait() Exceptions AWT, Swing, JavaFX & SWT 8
D ALLE exceptions in Log fenster anzeigen AWT, Swing, JavaFX & SWT 17
B Exceptions werfen und in JTextArea ausgeben AWT, Swing, JavaFX & SWT 4
B Exceptions in actionPerformed() weiterleiten AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen


Oben