wake-up-neo.com

Ternärer Operator - JAVA

Ist es möglich, dies zu ändern:

if(String!= null) {

    callFunction(parameters);

} else {

    // Intentionally left blank

}

... zu einem ternären Operator?

28
Lucas Pugliese

Nun, der ternary operator In Java) verhält sich so ...

return_value = (true-false condition) ? (if true expression) : (if false expression);

... Eine andere Sichtweise ...

return_value = (true-false condition) 
             ? (if true expression) 
             : (if false expression);

Ihre Frage ist irgendwie vage und wir müssen hier annehmen.

  • Wenn (und nur wenn)callFunction(...) einen non-void - Rückgabewert deklariert (Object, String, int, double, etc ..) - anscheinend funktioniert das nicht über Ihren Code - dann könnten Sie dies tun. ..

    return_value = (string != null) 
                 ? (callFunction(...)) 
                 : (null);
    
  • Wenn callFunction(...) keinen Wert zurückgibt, können Sie nicht den ternären Operator verwenden! So einfach ist das. Sie werden etwas verwenden, das Sie nicht benötigen.

    • Bitte poste mehr Code, um alle Probleme zu klären

Trotzdem ternärer Operator sollte nur alternative Zuweisungen darstellen !! Ihr Code scheint das nicht zu tun, also sollten Sie das nicht tun.

So sollten sie funktionieren ...

if (obj != null) {            // If-else statement

    retVal = obj.getValue();  // One alternative assignment for retVal

} else {

    retVal = "";              // Second alternative assignment for retVale

}

Dies kann umgewandelt werden in ...

retVal = (obj != null)
       ? (obj.getValue())
       : ("");

Da es so aussieht, als ob Sie versuchen könnten , diesen Code nur zu einem Einzeiler umzugestalten, habe ich Folgendes hinzugefügt

Auch wenn Ihre falsche Klausel wirklich leer ist, können Sie dies tun ...

if (string != null) {

    callFunction(...);

} // Take note that there is not false clause because it isn't needed

OR

if (string != null) callFunction(...);  // One-liner
52

Ja. Sie können mit dem gleichen null in else Block.

String result = str !=null ?  callFunction(parameters) : null;

Stellen Sie sicher, dass callFunction(parameters) ein String zurückgibt.

2
Suresh Atta

Der ternäre Operator kann verwendet werden, um zwei Ausdrücke zu kombinieren, aber ein leerer Anweisung ist kein Ausdruck.

Ein Methodenaufruf kann als Ausdruck verwendet werden, wenn die Methode einen Wert zurückgibt (read: ist nicht als void deklariert) und zusammen mit einer Dummy-Konstante null verwendet werden kann, um einen ternären Operator zu bilden Das Ergebnis wäre wiederum ein Ausdruck, der an Stellen, an denen eine Anweisung erforderlich ist, nicht zulässig ist. Mit anderen Worten, er kann eine if -Anweisung nicht ersetzen.

Indem Sie ein weiteres Konstrukt hinzufügen, das einen Ausdruck verwendet und keine zusätzlichen Nebenwirkungen auferlegt, können Sie einen vollständigen Ersatz erstellen. Z.B. Wenn Sie eine neue, ansonsten nicht verwendete lokale Variable deklarieren und zuweisen, erhalten Sie:

Object dummy=condition? callFunction(parameters): null;

Es hat jedoch keinen Vorteil, einfach if(condition) callFunction(parameters); zu sagen. Es kann sogar unnötigen Overhead verursachen, da das Auto-Boxing ausgeführt wird, wenn der Rückgabewert ein primitiver Typ ist.

Mit Java 8 gibt es eine Lösung für das Rätsel, die auch für void Methoden funktioniert:

((Runnable)(condition? ()->callFunction(parameters): ()->{})).run();

aber es hat immer noch keinen Vorteil gegenüber der einfachen Verwendung von if.

2
Holger

Es ist möglich, dass Ihre Methode callFunction() einen Rückgabetyp hat. Dann könnten Sie es tun wie SURESH ATTA schrieb in seiner Antwort:

String result = str!=null ? callFunction(str) : null;

Oder mit einem anderen Typ für Ergebnis oder andere Argumente. Wenn Sie eine Methode auch in der Anweisung else- aufrufen möchten, muss diese den gleichen Rückgabetyp haben wie die in Ihrer Anweisung if-.

Wenn Ihre Methode keinen Rückgabetyp hat/der Rückgabetyp von callFunction()void ist, ist es nicht möglich, Ihren if-else zu ändern. -Anweisung in einen ternären Operator.

1
msrd0