[Java] Optionales Memorandum

Optional, das hat nichts mit Legacy-Code zu tun

Ich habe es kürzlich zum ersten Mal gerne verwendet, daher ist es ein Memo des Verwendungsbeispiels, damit ich es wieder verwenden kann.

Ich bin in einem Bereich eingeschrieben, in dem Java 1.6 2019 möglicherweise zu einem völlig neuen Projekt gezwungen wird. Ich hatte in dieser Zeit nicht viele Möglichkeiten, mit Java 8 in Kontakt zu treten. Unter solchen Umständen schrieb ich es mit den Informationen, die ich beim Erscheinen von Java 8 hörte: "Es scheint, dass die Nullprüfung leicht von Java 8 aus geschrieben werden kann." Ich habe auf mehreren Websites nachgesehen und geschrieben, aber wenn Sie Verbesserungsvorschläge oder Masakari haben, hinterlassen Sie bitte einen Kommentar. (Da es keinen Prüfer gibt, der meinen Code überprüfen kann) (Ich überprüfe andere Mitglieder)

Über get

Ich benutze es nicht, weil ich nicht wusste, wo ich es verwenden soll. Als ich mir einige Websites angesehen habe, habe ich "Don't use get" gesehen, daher denke ich, dass dies die richtige Antwort war. Es gibt ein Gefühl.

Hinweis

"Optional kann einfach die herkömmliche Nullprüfung ersetzen" war nicht die richtige Wahrnehmung. "Optional kann eine Nullprüfung erzwungen werden, um die Möglichkeit des Vergessens einer Nullprüfung auszuschließen" ist richtig ... Der Beispielcode funktioniert also, wird jedoch nicht mit der richtigen Erkennung der Verwendung von Optional geschrieben. Ich werde diesen Artikel verlassen, ohne ihn zu löschen, damit ich ihn nicht vergesse. Bitte achten Sie jedoch darauf, dass Sie nicht von jemandem wie mir erwischt werden, der "zum ersten Mal optional" ist. Danke @sikani! Schließlich muss es von einem Experten überprüft werden ... Glücklicherweise war ich unglücklich, dass ich das Schreiben in Optional in den Bewertungen anderer Leute nicht erwähnt habe. (Weil es darum geht, dass Java 8-ähnlicher Code nicht erzwungen wird)

Beispielcode

Java 1.6 ist absichtlich auf seltsame Weise geschrieben. Java 8 kann ordentlich geschrieben werden: entspannt: Für Java8 ** Die Verwendung ist etwas falsch. ** ~~ Selbst mit Java 1.6 können Sie mit einem ternären Operator in einen Liner schreiben, aber ... ret ist einfach nutzlos, wenn ~ else ohne vorherige Rückgabe verwendet wird und die private Methode nicht abgeschnitten wird und jedes Mal geschrieben wird. Der größte Teil des Legacy-Codes ist nicht wirklich cool, daher bringt mich Refactoring immer um. Selbst wenn ich Java 8 verwende, gibt es zu viele Mitglieder, die Java 1.6 so schreiben, wie es ist, und ich lache nicht mehr. Ich bin in Schwierigkeiten, weil ich mich wahrscheinlich als hochbewusstes System missverstehe ... Ich erinnere mich an die jüngste Kontroverse um die oberen Ränge. ~~ Es tut mir leid mich zu beschweren.

Java1.6


public String toStringIfNotNull(final Object obj) {
	String ret;
	if (obj == null) {
		ret = null;
	} else {
		ret = obj.toString();
	}
	return ret;
}

Java8


public String toStringIfNotNull(final Object obj) {
	return Optional.ofNullable(obj).map(Object::toString).orElse(null);
}

Wenn Sie Optional anstelle der Nullprüfung verwenden, ist die Kombination von "ofNullable" und "orElse" möglicherweise die beste Lösung als "of"! ?? Eindruck. Wenn es nicht null ist und der ursprüngliche Wert so zurückgegeben wird, wie es ist, ist es "Map" oder Zwischenverarbeitung? Ist einfach unnötig.

Neben "map" gibt es "filter" und "flatMap". filter gibt das Argument von orElse zurück, wenn es null ist und das Filterergebnis false ist. Wenn flatMap null ist, wird das Argument von orElse zurückgegeben, aber wenn das Ergebnis der flatMap-Verarbeitung null ist, wird eine NullPointerException ausgelöst. (Im Fall von "map" wird das Argument von "orElse" zurückgegeben, auch wenn das Verarbeitungsergebnis null ist.)

Wenn Sie den Prozess verzweigen möchten, anstatt den Wert zurückzugeben, je nachdem, ob er null ist oder nicht, können Sie "if (Optional.ofNullable (obj) .isPresent ())" schreiben. Außerdem gibt "isPresent" nur einen booleschen Wert zurück. Wenn Sie ihn jedoch auf "ifPresent" setzen und einen Lambda-Ausdruck als Argument übergeben, können Sie schreiben, dass der Lambda-Ausdruck des Arguments nur ausgeführt wird, wenn er nicht null ist. Nun, wenn es Java 7 oder höher ist, ist es meiner Meinung nach besser, mit if (Objects.isNull (obj)) (nonNull) zu verzweigen als mit isPresent.

Mir ist aufgefallen, dass ich bisher geschrieben habe, aber wenn es sich um den Verarbeitungsinhalt des Beispielcodes handelt, war "Objects.toString (obj, null)" (so etwas wie StringUtils.defaultString) gut ... ich war mir nicht sicher genug.

Recommended Posts

[Java] Optionales Memorandum
Java-Memorandum
JAVA Memorandum
Java Optionaler Typ
Java 8 studieren (optional)
Java-Studienmemorandum
Java 9 Optional :: stream
Java-Dokument von Java anzeigen Optional
WebApi-Memorandum mit Java
Ein Memorandum der Java8 Silver-Prüfung
Hinweise zur Java8 Gold-Prüfung
Schreiben Sie Java Try-Catch mit Optional neu
Memorandum
Java
Memorandum über Java 3-Hauptelemente (objektorientiert)
Java8 startet jetzt ~ Optional ~
Memorandum
Java
Vergleichen Sie Java 8 Optional mit Swift
Grundlegende Verwendung von Java Optionaler Teil 1
Java lernen (0)
Java studieren ―― 3
[Java] -Array
Konvertierung zwischen Kotlin nullable und Java Optional
Java geschützt
[Java] Anmerkung
[Java] Modul
Java-Array
Java studieren ―― 9
Java Scratch Scratch
Java-Tipps, Tipps
Java-Methoden
Java-Methode
Java (Konstruktor)
Java-Array
[Java] ArrayDeque
Java (überschreiben)
Java (Methode)
Java-Zeichenfolge
Java (Array)
Java-Serialisierung
Java Anfänger 4
JAVA hat bezahlt
Memorandum des neuen Absolventen SES [Java-Grundlagen]
Java studieren ―― 4
Java (gesetzt)
Java-Shell-Sortierung
[Java] compareTo
Mein Batis-Memorandum
Java studieren -5
Java reflektierend 获 获 举
Java (Schnittstelle)
Java-Array
Java studieren ―― 1
[Erstellen] Ein Memorandum über das Codieren in Java
[Java] Polymorphismus
Java # 0 studieren
Java-Überprüfung