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)
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.
"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)
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