【问题标题】:Java Equivalent to iif functionJava 等价于 iif 函数
【发布时间】:2011-06-08 18:29:45
【问题描述】:

问题很简单,java中是否存在与著名的iif等效的功能?

例如:

IIf (vData = "S", True, False)

提前致谢。

【问题讨论】:

  • JJnguy: 不,iif 是一个 inline-if 函数,它的第一个参数是布尔值,true 时返回第二个参数,false 时返回第三个参数。
  • 对于后代:请注意,关于短路,公认的答案实际上并不正确。改为阅读stackoverflow.com/questions/822810/iif-equivalent-in-c ...

标签: java function if-statement equivalent iif-function


【解决方案1】:
vData.equals("S") ? true : false

或者在这种特殊情况下显然可以写

vData.equals("S")

【讨论】:

  • 尤其是第二位。这对很多人来说并不那么明显。
  • 这不是一回事。使用IIF(x, y, z) 将始终评估yz(导致两者的副作用可见),而x ? y : z 将仅评估y xor z(导致只有一个副作用可见)。
  • @Gabe:VB 通常不支持短路评估。虽然 VB.NET 可以
  • 谢谢阿德里安,所有的答案都帮助了我。
【解决方案2】:

是的,三元运算? :

vData.equals("S") ? true : false

【讨论】:

    【解决方案3】:

    Java 三元运算符和IIf 的主要区别在于IIf同时计算返回值和未返回值,而三元运算符短路并只计算返回值.如果评估有副作用,则两者不等价。

    当然,您可以将IIf 重新实现为静态Java 方法。在这种情况下,两个参数都将在调用时进行评估,就像IIf 一样。但是没有完全等同于IIf 的内置Java 语言功能。

    public static <T> T iif(boolean test, T ifTrue, T ifFalse) {
        return test ? ifTrue : ifFalse;
    }
    

    (请注意,ifTrueifFalse 参数在 Java 中的类型必须相同,可以使用三元运算符或使用此通用替代方法。)

    【讨论】:

    • 谢谢,我明白了,类似于VB NET中的AndAlso、OrElse函数吧?
    • 是的,这是另一个短路的例子。
    【解决方案4】:

    if 与逻辑 iff 相同。

    boolean result;
    if (vData.equals("S"))
       result = true;
    else
       result = false;
    

    boolean result = vData.equals("S") ? true : false;
    

    boolean result = vData.equals("S");
    

    编辑:但是很可能您不需要变量,而是可以对结果采取行动。例如

    if (vData.equals("S")) {
       // do something
    } else {
       // do something else
    }
    

    顺便说一句,使用它可能被认为是一种好习惯

     if ("S".equals(vData)) {
    

    不同之处在于 vData 为空,第一个示例将引发异常,而第二个示例将为 false。您应该问问自己,您希望发生哪种情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-15
      • 1970-01-01
      • 2019-11-18
      • 2011-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      相关资源
      最近更新 更多