三元运算符 - JAVA

时间:2014-08-06 14:58:14

标签: java ternary-operator

是否可以改变这一点:

if(String!= null) {

    callFunction(parameters);

} else {

    // Intentionally left blank

}

......给三元运营商?

4 个答案:

答案 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返回值(ObjectStringint },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 - 语句进入三元运营商。