【发布时间】:2013-01-23 12:16:36
【问题描述】:
这是我关于多个捕获块How to deal with returning an object and handling errors的问题的后续内容
我的更新代码如下,但是我收到一个错误,我的 draw() 方法必须返回一个 int,有没有办法让编译器识别 endOfDeck() 将返回一个 int,从而满足返回要求? (参见“返回 endOfDeck())
有什么更聪明的方法可以做到这一点?
import java.util.ArrayList;
import java.util.ListIterator;
/**
* @author L
*
*/
public abstract class Deck
{
private ArrayList<Card> cards;
private ListIterator<Card> deckPosition = cards.listIterator();
private Card lastDrawn;
/**
*
*/
public Deck()
{
}
public int draw()
{
try
{
if(deckPosition.hasNext())
{
lastDrawn = deckPosition.next();
return 1;
}
else if(cards.isEmpty())
{
throw new EmptyDeckException();
}
else
{
throw new EndOfDeckException();
}
}
catch(EmptyDeckException e)
{
emptyDeck();
return 0;
}
catch(EndOfDeckException e)
{
return endOfDeck();
}
catch(Exception e)
{
System.out.println("Exception when drawing a card, check try/catch block in draw() method of Card");
e.printStackTrace();
}
}
public abstract int endOfDeck();
public abstract void emptyDeck();
}
【问题讨论】:
-
你的默认返回值应该是多少?万一所有的事情都发生了?在你的最终捕获块中返回它
-
不要对控制流使用异常。与其抛出
EmptyDeckException并稍后处理它,不如直接在那里解决该案例。