三元运算符 – JAVA

有可能改变这个:

if(String!= null) { callFunction(parameters); } else { // Intentionally left blank } 

……给三元运营商?

那么,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返回值( ObjectStringintdouble等等) – 它似乎不通过你的代码那样做 –那么你可以这样做…

     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 

要么

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

是。 你可以在else块中保持相同的null

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

确保callFunction(parameters)返回一个String

三元运算符可用于组合两个表达式,但空语句不是表达式。

如果方法返回一个值(read:未声明为void ),并且它可以与虚拟常量null一起使用以形成三元运算符,则方法调用可以用作表达式,但结果将再次是一个表达式,而不是允许在需要声明的地方,换句话说,它不能取代if声明。

通过添加另一个构建表达式并且不会产生额外的副作用,您可以构建完整的替换。 例如,通过声明并分配一个新的,否则未使用的局部变量,您将获得:

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

但是简单地说if(condition) callFunction(parameters);没有任何好处if(condition) callFunction(parameters); 。 它甚至可能会增加不必要的开销,因为如果返回值是基本类型,它将执行自动装箱。

使用Java 8,即使对于void方法也可以解决这个难题:

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

但它仍然没有简单使用if优势。

如果您的方法callFunction()具有返回类型,则可能是可能的。 然后,你可以像SURESH ATTA在他的回答中所写的那样做:

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

或者使用任何其他类型的结果或任何其他参数。 如果你想在else -Statement中调用一个方法,那么这个方法需要具有与if -statement中相同的返回类型。

如果您的方法没有返回类型/ callFunction()的返回类型为void ,则无法将ifelse -statement更改为三元运算符。