【问题标题】:Invalid java syntax using ternary operator [duplicate]使用三元运算符的Java语法无效[重复]
【发布时间】:2015-09-07 08:56:01
【问题描述】:

我正在使用队列实现堆栈。我的 pop() 函数最初看起来像:

public void pop(){
    queue1.isEmpty() ? queue2.poll() : queue1.poll();
}

这没有编译。这个定义有什么问题?

【问题讨论】:

  • 您的 queue1.isEmpty 方法是否返回布尔值?
  • queue2.poll()queue1.poll() 是否返回 same 类型?
  • 编译产生了什么 Throwable(异常或错误)?如果您正在实现一个 ArrayDeque,它有一个需要覆盖的 pop 方法——它非常适合堆栈实现。
  • 虽然三元运算符的这种使用在 Java 中是非法的,但有趣的是它在 C/C++ 中是合法的。 (不是说好坏。)

标签: java ternary-operator


【解决方案1】:

您需要分配(或返回)您正在轮询的Object。类似的东西

public void pop(){
    Object obj = queue1.isEmpty() ? queue2.poll() : queue1.poll();
}

或(我认为你真正想要的) - 类似

public Object pop(){
    return queue1.isEmpty() ? queue2.poll() : queue1.poll();
}

另见JLS-15.25. Conditional Operator ? :

【讨论】:

    【解决方案2】:

    条件运算符仅适用于 表达式 上下文。语句不是表达式。在您的情况下,您需要使用 if 声明:

    public void pop(){
        if (queue1.isEmpty()) {
            queue2.poll();
        } else {
            queue1.poll();
        }
    }
    

    如果您担心性能,请不要担心。使用if 语句绝对不会降低性能。

    【讨论】:

      猜你喜欢
      • 2015-03-25
      • 2014-09-29
      • 2017-12-09
      • 1970-01-01
      • 2019-09-10
      • 2016-09-05
      • 1970-01-01
      • 2020-06-20
      • 2016-04-28
      相关资源
      最近更新 更多