wake-up-neo.com

Wenn ohne sonst ternären Operator

Soweit ich das Netz durchsucht habe, hat die Anweisung immer eine if- und else-Bedingung wie a ? b : c. Ich würde gerne wissen, ob die if-Anweisung ohne else verwendet werden kann. Angenommen, ich habe den folgenden Code, möchte ich die PreparedStatement schließen, wenn sie nicht null ist

(Ich verwende Java-Programmiersprache.)

PreparedStatement pstmt;

//.... 

(pstmt!=null) ? pstmt.close : <do nothing>;
44
Z.V

Nein, das kannst du nicht tun. Versuchen Sie es stattdessen:

if(bool1 && bool2) voidFunc1();
45
frankie liuzzi

Schreib es einfach aus

if(pstmt != null) pstmt.close();

Es ist genau die gleiche Länge.

13
Jeroen Vannevel

Warum einen ternären Operator verwenden, wenn Sie nur eine Wahl haben

if (pstmt != null) pstmt.close(); 

ist genug!

13
cigno5.5

Wie in den anderen Antworten erwähnt, können Sie dazu keinen ternären Operator verwenden. 

Wenn Sie jedoch auf die Notwendigkeit stoßen, können Sie Java 8 Optional und Lambdas verwenden, um diese Art von Logik in eine einzige Anweisung zu bringen:

Optional.of(pstmt).ifPresent((p) -> p.close())
9
Krease

Der ternäre if-Operator ist der bestimmte ternäre Operator. Einzigartig.

Aus Wiki:

In der Mathematik ist eine ternäre Operation eine n-ary-Operation mit n = 3.

Das bedeutet, dass alle 3 Operanden für Sie benötigt werden.

9
Yegoshin Maxim

Eine ternäre Operation wird als ternäre Operation bezeichnet, da 3 Argumente erforderlich sind. Wenn 2 erforderlich ist, handelt es sich um eine binäre Operation.

Und wie oben erwähnt, ist es ein Ausdruck , der einen Wert zurückgibt.

Wenn Sie nichts anderes angeben, haben Sie eine undefinierte Situation, in der der Ausdruck keinen Wert zurückgeben würde.

Wie auch in anderen Antworten erwähnt, sollten Sie eine if Anweisung verwenden.

8

Sie können ternary nicht ohne etwas anderes verwenden, aber wenn Sie in einer Zeile ein "if-without-else" ausführen möchten, können Sie die Java-Klasse Optional verwenden.

PreparedStatement pstmt;

//.... 

Optional.ofNullable(pstmt).ifPresent(pstmt::close); // <- but IOException will still happen here. Handle it.
0
WesternGun