如果函数导致异常,如何避免返回值?

时间:2017-05-24 20:15:16

标签: java exception-handling

public int front(){
if(queue.empty()){
  while(!stack.empty()){
    queue.push(stack.pop());
  }
}
try{
  return queue.peek();
}catch(Exception e){
  System.out.println("Empty");
}
// What to do here?!!!
}

我正在使用2 queue实施stacks。这是一个返回queue前面元素的函数,但queueemptyexception必须引发。return。但try块以外必须有con.connect()声明,我感到困惑,不知道该怎么做

4 个答案:

答案 0 :(得分:3)

  

这里做什么?

如果抛出异常不是一个选项,那么在空队列上调用front()时你可以做的很少:这是一个编程错误,所以正确的做法是抛出{ {1}}表示。

IllegalStateException

从API设计的角度来看,所有其他选项都更糟糕:您可以保留try{ return queue.peek(); }catch(Exception e){ System.out.println("Empty"); throw new IllegalStateException("Empty"); } // return statement is no longer required here 值,并在队列为空时返回它,或者您可以将返回类型更改为int并且返回Integer,或者您可以将返回类型更改为一对nullint,其中boolean表示读取是否成功。但是,抛出未经检查的异常更合适,因为用户在询问其前端元素之前必须检查队列是否为空。

答案 1 :(得分:1)

我会抛出一个异常,就像

一样
public int front(){
    //..code
    if(queue.isEmpty()) //or whatever the condition for exception is
        throw new Exception(); //or whatever exception
    else
        return queue.peek(); //return value if exception does not occur
}

答案 2 :(得分:0)

您可以返回一个Integer类型对象并检入调用代码以查看返回值是否为null。这样,如果它为null,你可以假设它是空的。

你可以做的另一件事是让调用代码处理异常并让front()方法像这样抛出异常:

public int front() throws Exception {
    if(queue.empty()){
        while(!stack.empty()){
            queue.push(stack.pop());
        }
    }
    return queue.peek();
}

这意味着无论哪个方法调用front()都必须处理异常。

答案 3 :(得分:0)

您的评论不会做任何事情,但您会在var findTemplate = function(event) { var target = $(event.target); var templateName = target.val(); var template = $("#"+templateName); var template = template.html(); var textarea = $(".texta"); textarea.html(template); }; 块中返回null(确保您的调用方先检查catch的返回值试图使用结果),或者你可以抛出异常。