[JAVA] Schreiben Sie einen Nullfall mit dem Typ Optional, ohne die if-Anweisung zu verwenden

Was ist optional (Philosophie)

Optional ist ein Typ, der davon ausgeht, dass er möglicherweise null ist. Durch Speichern des Objekts im Inneren können Sie das Verhalten bei Null separat schreiben. Wenn Sie die Schlussfolgerung schreiben, können Sie die Anweisung ** "if" als Methodenkette schreiben. ** **.

Was ist überhaupt falsch an Null?

Kurz gesagt, "Nurupo" ist ein Typ ...

Etwas detaillierter, in der Objektorientierung, ist ein Objekt ein riesiger Datenblock, der sich mit vielen Methoden und Feldern bewegt.

Wenn die Variable des Objekts null ist und Sie eine Methode aus dieser Variablen aufrufen, greifen Sie auf eine nicht materialisierte Methode zu und erhalten eine ** NullPointerException **.

Daher muss der Code weitgehend neu geschrieben werden, je nachdem, ob das Objekt vorhanden ist oder nicht.

Bei Verwendung von if Minuten

Die if-Anweisung ist eine typische Syntax, die das Verhalten ändert, wenn es existiert und wenn es nicht existiert. Es ist die Grundlage der Grundlagen des Programms.

Wenn das A-Objekt vorhanden ist, können Sie beispielsweise den Wert mit der Methode getDataWord () des B-Objekts abrufen.

foo.java


   ~
   String wantData = null;
   if(A_var != null){
      wantData = A_var.gethogeWord();
   } else if (B_var != null){
      wantData = B_var.getDataWord();
   } else {
     wantData = "Es gab keine(・_・`)") ;
   }
    System.out.println(wantData);
    ~

Ist das eine typische Schreibweise? Vergessen Sie natürlich nicht die impliziten ** A- und B-Fälle ** und ** A- und B-Fälle **.

Wenn Anweisungen jedoch schwierig zu verwalten sind. Darüber hinaus ist es einfach, Fälle zu kombinieren und eine Explosion zu verursachen, was das Verschachteln schwierig macht.

Schreiben Sie dies mit Optional.

Wenn Sie dies mit einer Option schreiben, sieht es so aus.

foo.java


   ~
		String wantData = null;

		//Optionaler Wrap-Wert
		Optional<A_class> ObjA_opt = Optional.ofNullable(A_var);
		Optional<B_class> ObjB_opt = Optional.ofNullable(B_var);

		//Holen Sie sich den Wert.
		Optional<String>Hogeword_opt = ObjA_opt.map(A_var->  A_var.gethogeWord());
		Optional<String>DataWord_opt = ObjB_opt.map(B_var ->  B_var.getDataWord());

		//Auswechslung
		wantData = Hogeword_opt.orElseGet(() -> null);
		if(wantData == null){
			wantData =DataWord_opt .orElseGet(() -> null);

		}

        System.out.println(wantData);
    ~

Es ist schwer, Scheiße zu sehen, und ich frage mich, ob "wenn" herauskommt, was am meisten ist. Lassen Sie uns den Code erklären, bevor wir darauf eingehen.

Ich benutze alle optionalen Methoden. Erstens die Methode **. Of Nullable () **. Dadurch wird die potenziell null-Variable in einen optionalen Typ eingeschlossen. Dieses Mal deklarieren wir einen optionalen Typ, der ein Objekt vom Typ A_class speichert.

Dann die **. Map () ** Methode. Verwenden Sie einen Lambda-Ausdruck, um eine Variable zu erhalten, die den Rückgabewert rechts mit Optional umschließt. Dieses Mal möchte ich, dass der Getter eine Zeichenfolge zurückgibt, daher verwende ich ein optionales Objekt, in dem der Zeichenfolgentyp gespeichert ist.

Schließlich die ** getElse () ** Methode. Hier erhalten wir den Wert, den wir in das optionale Objekt eingegeben haben. Rechts neben dem Lambda-Ausdruck steht ** "Wert, der zugewiesen werden soll, wenn der Wert null ist" **.

Es ist hier zu beachten, dass die Methode des optionalen Typs den optionalen Typ zurückgibt. Mit anderen Worten, es kann ** in einer Zeile mit einer Methodenkette ** stehen.

Verbinde dich mit Papa über eine Methodenkette und es ist großartig!

Wenn Sie dies schreiben, indem Sie die Methodenkette verbinden, wird es so sein.

foo.java


   ~
		String wantData = null;

		wantData = Optional.ofNullable(A_var)		//Optionaler Wrap-Wert
				.map(A_var-> A_var.gethogeWord())//Methodenausführung mit dem zurückgegebenen optionalen
				.orElseGet(() -> null);//Holen Sie sich den Wert.

		wantData = Optional.ofNullable(B_var)		//Optionaler Wrap-Wert
				.map(B_var-> B_var.getDataWord())//Methodenausführung mit dem zurückgegebenen optionalen
				.orElseGet(() -> null);//Holen Sie sich den Wert.

       wantData =  Optional.ofNullable(wantData)
               .getElse(() -> "Weder war enthalten.");

        System.out.println(wantData);
    ~

Eine Technik, die erreicht werden kann, weil alle Rückgabetypen optional sind. Ich glaube, ich habe einen ziemlich sauberen Code geschrieben. Es ist besser lesbar als die if-Anweisung, und ich denke, es ist einfacher, ähnliche Bedingungen zu erstellen und Bedingungen hinzuzufügen oder zu ändern.

Ich denke, dass eine if-Anweisung dafür in Ordnung ist, aber ich denke, dass der Effekt verstanden wird, wenn die Bedingungen komplizierter werden.

Ich konnte gut lesbare Fälle schreiben, ohne Blöcke zu verwenden.

Nachtrag 3/3

Ja, wie kommentiert, ersetzt dies das Ergebnis von B unabhängig vom Wert von A. Das ist fürchterlich. Dies ist der Code, der ordnungsgemäß funktioniert

foo.java


   ~
		String wantData = null;

        //Deklarieren Sie optionale Variablen
		Optional<A_class> A_opt = Optional.ofNullable(A_var);
		Optional<B_class> B_opt = Optional.ofNullable(B_var);
	

		wantData =A_opt.map(haitteru_A ->  haitteru_A.gethogeWord())
							.orElseGet(() ->//Machen Sie eine Verschachtelung im Lambda-Stil!
							       cm_opt.map(haitteru_B -> haitteru_B.getDataWord())//Erhalten durch die Methode auf der B-Objektseite
							      .orElseGet(() -> "No Password!") //Wiederausführung des Lambda-Ausdrucks Was wird zugewiesen, wenn beide null sind?
							);

        System.out.println(wantData);
    ~

Das Verständnis des Lambda-Ausdrucks ist ebenfalls heikel, und die fortgeschrittene Version ist unangenehm Ich habe versucht, es zu schaffen, aber ... am Ende ist es unvermeidlich, dass es eine nestartige Struktur haben wird ...

In diesem Code ist zu beachten, dass der endgültige Wert, der wantData zugewiesen wird, vom Typ Spring ** sein muss Die .orElsGet () -Methode funktioniert als einfache If-Anweisung auf der rechten Seite des Lambda-Ausdrucks und gibt sie sogar aus. ** Bitte beachten Sie, dass ein Compilerfehler auftritt, wenn Sie unterwegs Integer eingeben **. Hier muss man ein solides Design machen.

Fazit

Optional Verwenden wir mehr. Fortschritte machen.

Recommended Posts

Schreiben Sie einen Nullfall mit dem Typ Optional, ohne die if-Anweisung zu verwenden
Duplizieren Sie ein Objekt mit einem generischen Typ
Schreiben Sie eine dritte If-Anweisung, die weder eine if-Anweisung noch ein ternärer Operator ist
Wie schreibe ich eine if-Anweisung, um die Lesbarkeit von Java zu verbessern?
Überprüfen Sie, ob eine Zeichenfolge ohne Verwendung von Integer # parseInt in int konvertiert werden kann
Finden Sie den Rest geteilt durch 3, ohne eine Zahl zu verwenden
null gibt den Typ an
So geben Sie Array-Werte ohne Verwendung einer for-Anweisung aus
Lassen Sie uns die if-Anweisung verstehen!
Was ist, wenn ich eine finally-Klausel in die Try-with-Resources-Syntax schreibe?
Die Geschichte eines Othello-Spiels vom Kommunikationstyp mit Scala.
Richten Sie eine Wordpress Docker-Umgebung ein, ohne das Worpdress-Image zu verwenden
[Java] Es kann glücklich sein, wenn der Rückgabewert der Methode, die null zurückgibt, Optional <> ist