[JAVA] Erstellen Sie Ausnahmen mit einer Fluid-Schnittstelle

Die Ausnahmeschnittstelle, die Sie mit einem Konstruktor mit Argumenten versuchen, ist schwierig zu verwenden, nicht wahr? Das ist die Geschichte.

Annahme

Problematische Ausnahme

Zum Beispiel, wenn Sie eine Ausnahme mit zwei eindeutigen Feldern machen möchten


@Getter
public class SampleException extends RuntimeException {

    private String code;

    private String id;

    ...

Wir werden darüber sprechen, welche Art von Konstruktor vorbereitet werden soll.

Es ist schon schwer, über die Kombination davon nachzudenken und einen Konstruktor zu erstellen. Da "Code", "ID" und "Nachricht" vom gleichen Typ sind, ist es außerdem nicht möglich, einen Konstruktor zu erstellen, der nur diesen für jeden festlegt.

    public SampleException(String message, String id, String code) {
        super(message);
        this.id = id;
        this.message = message;
    }

Sie können Null an die Stelle setzen, an der Sie nicht eintreten können. Sie könnten denken, aber es ist nicht klug. Wenn die Anzahl der Konstruktoren zunimmt, muss sich der Benutzer auch um die Reihenfolge sorgen, was schwierig ist. (Wenn Sie Javadoc richtig schreiben, können Sie es verstehen, aber wenn Sie es nicht einzeln sehen, werden Sie es nicht verstehen.) Es ist dieses Level mit zwei Feldern, also wäre es katastrophal, wenn es mehr Felder gäbe ...

Gelöst mit einer Flüssigkeitsschnittstelle

@Getter
public class SampleException extends RuntimeException {

    private String code;

    private String id;

    private SampleException(String message, Throwable cause) {
        super(message, cause);
    }

    public static class SampleExceptionThrower {

        private String message;

        private Throwable cause;

        private String code;

        private String id;

        private SampleExceptionThrower() {
        }

        public static void call(Consumer<SampleExceptionThrower> consumer) {
            SampleExceptionThrower builder = new SampleExceptionThrower();
            consumer.accept(builder);
            SampleException exception = new SampleException(builder.message, builder.cause);
            exception.code = builder.code;
            exception.id = builder.id;
            throw exception;
        }

        public SampleExceptionThrower setMessage(String message) {
            this.message = message;
            return this;
        }

        public SampleExceptionThrower setCause(Throwable cause) {
            this.cause = cause;
            return this;
        }

        public SampleExceptionThrower setId(String id) {
            this.id = id;
            return this;
        }

        public SampleExceptionThrower setCode(String code) {
            this.code = code;
            return this;
        }

    }

}

Fließendes Builder-Muster. Sie können es so verwenden.

SampleExceptionThrower.call(builder -> builder.setCause(e)
    .setMessage("message").setCode("code"));

Sehr sauber!

Nachwort

Ich mag den Namensruf nicht, also gib mir bitte ein paar gute Ideen ...

Recommended Posts

Erstellen Sie Ausnahmen mit einer Fluid-Schnittstelle
Ausnahmebehandlung mit einer Fluidschnittstelle
Erstellen Sie einen Spielplatz mit Xcode 12
Erstellen Sie mit Docker eine Vue3-Umgebung!
Viel Spaß beim Programmieren mit Lambda-Stil und flüssiger Oberfläche
Erstellen Sie ein Maven-Projekt mit Befehlen
Erstellen Sie mit dem Befehl eine JAR-Datei
[Rails6] Erstelle eine neue App mit Rails [Anfänger]
Erstellen Sie mit Dropwizard eine einfache Webanwendung
[Schienenentnahme] Erstellen Sie eine einfache Entnahmefunktion mit Schienen
[Rails 5] Erstelle eine neue App mit Rails [Anfänger]
[Memo] Erstellen Sie mit Docker ganz einfach eine CentOS 8-Umgebung
Erstellen Sie mit Spring Boot eine einfache Such-App
Erstellen Sie eine CSR mit erweiterten Informationen in Java
Erstellen Sie mit Java + MySQL ein einfaches Bulletin Board
[Rails] Rails neu, um eine Datenbank mit PostgreSQL zu erstellen
[Windows] [IntelliJ] [Java] [Tomcat] Erstellen Sie mit IntelliJ eine Umgebung für Tomcat 9
Lassen Sie uns mit Javas Timer einen zeitgesteuerten Prozess erstellen! !!
[Java] Erstellen Sie eine Sammlung mit nur einem Element
Erstellen Sie einen Team-Chat mit Rails Action Cable
Erstellen Sie ein SandBox-Konto mit Fastlane Spaces IP
Erstellen Sie einen Web-API-Server mit Spring Boot
Erstellen Sie mit Docker eine Spring Boot-Entwicklungsumgebung
Versuchen Sie es mit Trailblazer
[Java] Erstellen Sie einen Filter
Erstellen einer EC-Site mit Rails 5 ⑨ ~ Erstellen einer Warenkorbfunktion ~
Erstellen Sie eine Vorlage für das iOS14-Widget mit Absichtskonfiguration.
Erstellen Sie eine Chat-App mit WebSocket (Tyrus) + libGDX + Kotlin
[Hinweis] Erstellen Sie mit Docker eine Java-Umgebung von Grund auf neu
Erstellen Sie einen Service mit einem leeren Modell Liferay 7.0 / DXP
Erstellen Sie mit Spring Security 2.1 eine einfache Demo-Site mit Spring Security
Ich habe versucht, mit Chocolatey eine Java8-Entwicklungsumgebung zu erstellen
Tutorial zum Erstellen eines Blogs mit Rails für Anfänger Teil 1
Erstellen Sie ein Seitensteuerelement, das mit RecyclerView verwendet werden kann
Erstellen Sie ein Docker-Image mit installiertem Oracle JDK (yum
[Rails] Ich habe versucht, eine Mini-App mit FullCalendar zu erstellen
Erstellen Sie eine Hello World-Webanwendung mit Spring Framework + Jetty
Erstellen Sie einen SlackBot mit AWS Lambda & API Gateway in Java
Eine Geschichte, die von String () von Interface abhängig ist und von JdkDynamicAopProxy vertreten wird
Bis Sie eine Webanwendung mit Servlet / JSP erstellen (Teil 1)
Tutorial zum Erstellen eines Blogs mit Rails für Anfänger Teil 2
Ich habe versucht, mit Docker eine Padrino-Entwicklungsumgebung zu erstellen
Tutorial zum Erstellen eines Blogs mit Rails für Anfänger Teil 0
Erstellen Sie eine XML-RPC-API mit Wicket
Erstellen Sie eine Java-Methode [Memo] [java11]
Erstellen Sie ein VSCode-Plugin.
Erstellen Sie eine Lotterie mit Ruby
Erstellen Sie mit Spring Boot einen Mikrodienst
So erstellen Sie eine Methode
Eine Geschichte, die bei NotSerializableException steckt
[SAP] Erstellen Sie eine Entwicklungsumgebung mit NW AS ABAP Developer Edition (1).
Erstellen Sie einen einfachen Webserver mit der Java-Standardbibliothek com.sun.net.httpserver
Ich habe mit JD-Core eine Befehlszeilenschnittstelle mit dem WinMerge Plugin erstellt
Erstellen Sie eine einfache CRUD mit SpringBoot + JPA + Thymeleaf ④ ~ Fehlermeldung anpassen ~