Ist es möglich, dies zu ändern:
if(String!= null) {
callFunction(parameters);
} else {
// Intentionally left blank
}
... zu einem ternären Operator?
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.
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
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.
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
.
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.