2016-09-07 1 views
2

Ich bin sehr neu in der Programmierung, also sei bitte bitte! : DNonlocal Rückkehr von Lambda?

public void test(Optional<String> testString){ 
    testString.ifPresent(s -> { 
     //do stuff... 
     System.out.println("Exit method"); 
     return; 
    }); 
    //Log if it was not present 
    Logger.log("..."); 
} 

Hier haben Sie ein Code-Snippet. Wenn das Optional vorhanden ist, mache ich ein paar Sachen und möchte die Methode beenden, indem ich einfach return anrufe. Ich frage mich jetzt, warum mein Logger etwas protokolliert, obwohl der testString vorhanden ist. Kann jemand bitte darauf hinweisen, was ich vermisse? Vielen Dank !

Antwort

2

Das Problem ist, dass, wenn Sie tun:

testString.ifPresent(s -> { 
     //do stuff... 
     System.out.println("Exit method"); 
     return; 
    }); 

Sie aus einer Lambda-Funktion zurückzukehren, und nicht aus dem Test(), wie Sie es erwarten.

Try isPresent mit:

if (testString.isPresent()) { 
     System.out.println("Exit method"); 
     return; 
    } 
    //Log if it was not present 
    System.out.println("Not present"); 
+0

Oh, ich sehe, danke für das Aufzeigen. Gibt es eine Möglichkeit, die Testmethode innerhalb des Lambda zu beenden? – IonicBlaze

+1

Die einzige Möglichkeit, die mir bekannt ist, ist eine RuntimeException irgendeiner Art zu werfen. Nicht nett. –

+0

Okay, ich werde dann mit Ihrem Vorschlag gehen. Vielen Dank! :) – IonicBlaze

2

Mit Java 9 Optional wird die Methode

void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction) 

haben, die die sonst Teil als gut behandelt. Fürs Erste solltest du bei der bereits akzeptierten Antwort bleiben.

+0

Gut zu wissen, danke für Ihren Hinweis. – IonicBlaze