是否可以改变这一点:
if(String!= null) {
callFunction(parameters);
} else {
// Intentionally left blank
}
......给三元运营商?
答案 0 :(得分:49)
嗯,Java中的ternary operator
就是这样......
return_value = (true-false condition) ? (if true expression) : (if false expression);
......另一种看待它的方式......
return_value = (true-false condition)
? (if true expression)
: (if false expression);
你的问题有点模糊,我们必须在这里假设。
如果(仅限于) callFunction(...)
声明non-void
返回值(Object
,String
,int
},double
等等。) - 它似乎不能通过你的代码 - 然后你可以做到这一点......
return_value = (string != null)
? (callFunction(...))
: (null);
如果callFunction(...)
未返回值,则无法使用三元运算符!就那么简单。你将使用你不需要的东西。
尽管如此,三元运算符只能表示替代分配!! 您的代码似乎没有这样做,所以您不应该这样做。
这是他们应该如何运作......
if (obj != null) { // If-else statement
retVal = obj.getValue(); // One alternative assignment for retVal
} else {
retVal = ""; // Second alternative assignment for retVale
}
这可以转换为......
retVal = (obj != null)
? (obj.getValue())
: ("");
由于您似乎可能试图将此代码重构为单行代码,因此我添加了以下内容
另外,如果您的假条款真的为空,那么您可以这样做......
if (string != null) {
callFunction(...);
} // Take note that there is not false clause because it isn't needed
OR
if (string != null) callFunction(...); // One-liner
答案 1 :(得分:2)
是。您可以在null
阻止中保持相同的else
。
String result = str !=null ? callFunction(parameters) : null;
确保callFunction(parameters)
返回String
。
答案 2 :(得分:2)
三元运算符可用于组合两个表达式,但空语句不是表达式。
如果方法返回一个值(读取:未声明void
)并且它可以与虚拟常量null
一起使用以形成三元运算符,则可以将方法调用用作表达式但结果将是一个表达式,在需要语句的地方是不允许的,换句话说,它不能替换if
语句。
通过添加另一个构建表达式并且不会产生额外的副作用,您可以构建完整的替换。例如。通过声明并分配一个新的,否则未使用的局部变量:
Object dummy=condition? callFunction(parameters): null;
但简单地说if(condition) callFunction(parameters);
没有任何好处。它甚至可能会增加不必要的开销,因为如果返回值是基本类型,它将执行自动装箱。
使用Java 8,该解决方案有一个解决方案,即使对于void
方法也是如此:
((Runnable)(condition? ()->callFunction(parameters): ()->{})).run();
但它仍然没有优势,只使用if
。
答案 3 :(得分:1)
如果您的方法callFunction()
具有返回类型,则可以。然后,你可以像 SURESH ATTA 一样在他的回答中写道:
String result = str!=null ? callFunction(str) : null;
或者使用任何其他类型的结果或任何其他参数。如果你想在else
- Statement中调用一个方法,那么这个方法需要具有与if
语句中相同的返回类型。
如果您的方法没有返回类型/ callFunction()
的返回类型为void
,则无法更改if
- else
- 语句进入三元运营商。