三元运算符 – 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
返回值(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
要么
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
,则无法将if
– else
-statement更改为三元运算符。