【问题标题】:Throwing StackUnderFlowException - how to do it? Is it costly?抛出 StackUnderFlowException - 怎么做?成本高吗?
【发布时间】:2013-07-19 14:14:34
【问题描述】:

我有一个可能为空的堆栈。我想检查它是否为空,如果是我想抛出一个StackUnderFlowException

if(myStack.empty()) {
   throw new StackUnderFlowException("Some error message");
}

问题:

  1. 这样有效吗?我知道您不打算使用 Exceptions 进行流量控制。我不认为我是因为我明确检查堆栈是否为空?
  2. 我如何导入 StackUnderFlowException 类,因为我现在收到此错误:

    PriceHolder 类型的方法 foo(String) 引用了缺失的类型 StackUnderFlowException

非常感谢。

【问题讨论】:

  • 你是说myStack.empty() 吗?
  • 抱歉...这是Stacks 中的HashTable。我会从问题中删除HashTable 的东西,因为它无关紧要。
  • 没有标准的 StackUnderflowException。它可能来自您正在使用的库,但如果您不说是哪个并显示您的代码,我们无法判断。使用的标准例外是java.util.EmptyStackException

标签: java exception exception-handling stack


【解决方案1】:

这样有效率吗?

当然。除非在有错误的代码中,否则永远不会发生这种情况,谁在乎没有正确执行的代码的效率如何?

我知道您不打算使用异常来控制流。

不管那是什么意思。这个gnomic pronunciamento 的问题在于异常 一种流控制形式。不要太挂在这个行业收到的意见。其中许多是短暂的,还有更多是毫无价值的。在这种情况下,抛出异常是完全合理的。在这种情况下,比使用带外返回值更好,有时没有任何带外返回值。

我不认为是因为我明确检查堆栈是否为空?

我不明白这句话的相关性。

如何导入 StackUnderFlowException 类

什么 StackUnderflowException 类? JDK中没有。 Maye你必须它吗?

【讨论】:

    【解决方案2】:

    从概念上讲,您对预期发生的事情使用流控制,对不应该发生的事情使用例外。在我见过的大多数库(包括标准 Java 库)中,试图访问不存在的容器元素被视为编程错误,并且通常使用异常或类似机制发出信号。

    至于 #2,您需要确定 StackUnderFlowException 所在的包。如果您需要帮助,请说明您使用的是哪个 StackUnderFlowException。

    【讨论】:

      猜你喜欢
      • 2016-11-14
      • 1970-01-01
      • 2011-02-05
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多