【问题标题】:Use ternary operator for flow control in Java在 Java 中使用三元运算符进行流控制
【发布时间】:2015-04-20 09:31:32
【问题描述】:

?:(三元)运算符可以代替 if-then-else 语句进行赋值,但也可以以某种方式用于流控制?例如,

flag ? method1 : method2;

【问题讨论】:

  • 你试过了吗?发生了什么?
  • 是的。确实。您是否有特定问题以这种方式调用方法?
  • 可以。你能补充一些具体的例子吗?
  • 只是迂腐:? :a 三元运算符(接受三个操作数的运算符)。它的专有名称是条件运算符。它恰好是 Java 目前唯一的三元运算符,但是...

标签: java ternary-operator


【解决方案1】:

是的,但是

  1. 你必须保存结果;你不能只拥有一个表达式(在 Java 中;你可以在其他一些语言中)。

  2. 方法不能有 void 返回类型。

条件表达式的类型取决于您使用的方法的返回类型。如果两者都返回布尔值,则类型将为布尔值;如果两者都是数字,则结果将是数字;否则,结果将是引用类型(例如,Object)。

例如:

x = flag ? method1() : method2();

JLS §15.25 - Conditional Operator ? : 中的更多信息。

如果能够以这种方式使用条件对您很重要(就我个人而言,我会坚持使用流控制语句),您可以定义一个如下所示的实用方法:

static void consume(Object o) {
}

然后:

consume(flag ? method1() : method2());

【讨论】:

  • 并非所有非空类型都兼容(使用Object 作为常见的“超类型”)。
  • 如果你的两个方法真的不需要返回任何东西,你可以声明它们返回一个Void对象,我希望人们意识到这意味着方法不会返回任何有用的东西 - 然后你可以在每个末尾添加一个return null;。但是,在这种情况下,我不希望首先使用三元。
【解决方案2】:

可能已经回答了。但是,是的,如果两个方法都返回相同的类型,我们可以在三元运算中使用这些方法。示例如下。

public static void main(String[] args) {
        boolean b = true;
        int i = b ? getThis() : getThat();
    }

    public static int getThis() {
        return 1;
    }

    public static int getThat() {
        return 2;
    }

【讨论】:

    【解决方案3】:

    您可以使用它,但它应该是相同的(可能是转换后)返回类型见JLS 15.25. Conditional Operator ? :了解更多详情:

    这种转换可能包括装箱或拆箱转换(§5.1.7、§5.1.8)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-13
      • 2014-02-08
      • 2011-03-12
      相关资源
      最近更新 更多