Der beste Weg, um den wahren, falschen, nicht gesetzten Zustand zu definieren
Wenn Sie in einer situation, wo Sie brauchen, um zu wissen, wo ein boolescher Wert nicht gesetzt (z.B. wenn das unset Wert sollte Erben von einem Elternteil-Wert) der Java boolean primitive (und das äquivalent in anderen Sprachen) ist eindeutig nicht ausreichend.
Was ist die best practice, um dies zu erreichen? Definieren Sie eine neue, einfache Klasse, die fähig ist, auszudrücken, alle drei Staaten oder verwenden Sie die Java-Boolean-Klasse und verwenden Sie null, um anzuzeigen, das unset Staat?
InformationsquelleAutor der Frage Tom Martin | 2008-11-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde die verwenden. Es ist die straight-forward.
Andere Möglichkeit ist die Verwendung einer enumeration. Vielleicht ist das sogar besser und schneller, da keine Boxen ist erforderlich:
Es ist der Vorteil der ersten, daß die Benutzer Ihre Klasse nicht brauchen, um über Ihre drei-state-boolean". Sie kann immer noch passieren
true
undfalse
. Wenn Sie nicht wie dienull
da es sagt eher wenig über seine Bedeutung hier können Sie noch einepublic static final Boolean tralse = null;
in Ihrer Klasse.InformationsquelleAutor der Antwort Johannes Schaub - litb
Zwar nicht Java-spezifisch, meine eigene Präferenz in diesem Szenario ist das definieren eines ThreeState-Klasse oder Aufzählung und verwenden Sie es, -- nur wie du schon erwähnt hast, eine Wahre, eine Falsche und eine Undefinierte (oder Default,, oder Ausgeschaltet, da Ihre domain-spezifische Terminologie-Vorgaben). Es fühlt sich besser, mehr Natur und mehr selbsterklärend als der Vertretung nicht gesetzt/undefiniert mit
null
.InformationsquelleAutor der Antwort John Rudy
In Java 8 gibt es auch die Optional option:
Als bonus, erhalten Sie alle diese Karte und verbrauchen Methoden.
InformationsquelleAutor der Antwort voho
Die nullable boolean bekommt meine Stimme
InformationsquelleAutor der Antwort Chris Simpson
Verwendung von null-Werte repräsentieren den Zustand von etwas ist schlechtes design. Es ist undescriptive und schwer zu pflegen. Ich hätte lieber ein State-Objekt mit default-Zustand ist, wenn nichts explizit eingestellt wurde. Zum Beispiel:
Diese sagt mir nicht, etwas über, was den erwarteten Zustand ist. Etwas mehr wie das macht es klarer.
Nicht zu erwähnen, erweiterbar. Was passiert, wenn man eine vierten Staat?
InformationsquelleAutor der Antwort Hates_
Kommt es an. Hier können Sie erwähnen, es würde gelöscht werden, wenn es zu Erben, seinen Wert aus einem übergeordneten Wert. Haben Sie irgendeine Art von Daten-Hierarchie? So etwas wie dieses:
In diesem Fall, wenn es möglich ist, würde ich sagen, einfach nicht Wert2 in das Kind, und haben Sie Ihre lookup-Logik so sein, dass, wenn es nicht die variable ist, sucht es die Eltern für den Wert.
InformationsquelleAutor der Antwort Claudiu
Ich würde einfach mit einem int (integer) mit Werten 0,1,2 und Griff in Programm.
InformationsquelleAutor der Antwort Suriya
In der Übergeordneten Klasse initiieren, die boolean zu null und in der Kind-Klasse zu bauen eine Methode, um zu überprüfen, um zu sehen, wenn der boolean gesetzt wurde
in der Übergeordneten Klasse
In der Kind-Klasse
Stellen Sie sicher, dass assertions aktiviert sind. Ausnahmen sind nur für den Entwicklungsprozess und test-Zyklus, Sie sind nicht für die runtime-exceptions.
InformationsquelleAutor der Antwort WolfmanDragon
java.lang.Boolean tut dies für Sie. Es gibt statische Konstanten Boolean.TRUE, Boolean.Falsch.
private Boolean myBoolean;
sollte alles, was Sie brauchen.Beachten Sie, dass Boolesche.TRUE übergeben wird, eine äquivalenz-test, sondern unterscheidet sich von "true" (wird autoboxed TRUE).
InformationsquelleAutor der Antwort Steve B.