假设我有一个方法“ position”,该方法接受2个坐标并创建一个位置对象以将其保持在其中。为确保这些坐标不超出范围,将引发InvalidPositionException。
public Position(int x, int y) throws InvalidPositionException {
try {
if (x > 10 || x < 1 || y>10 || y<1) {
throw new InvalidPositionException("Position x = "+x+", y = "+y+" is out of bounds");
} else {
setX(x);
setY(y);
}
} catch (InvalidPositionException e) {
System.err.println(e);
}
}
如果现在我想从另一个类创建新的位置对象,则会收到错误消息“未报告的异常InvalidPositionException;必须捕获或声明为抛出”
如何在不创建新位置对象的方法的方法签名中声明“抛出”的情况下进行这项工作?
最佳答案
转到类InvalidPositionException
,并使其继承自RuntimeException
。RuntimeException
是未经检查的异常,这意味着编译器不会强迫您处理它们。当您超出数组范围时,这就是一个很好的例子。您不必每次访问数组时都需要编写处理此问题的代码(例如我们处理IOException
的方式)。类似的示例是NullPointerException
。但是,在两种情况下,您都可以编写代码来捕获异常并对其进行处理。
如果您是检查异常的纯粹主义者并且不想使用try-catch
块,则解决该问题的另一种方法是在输入数据的任何屏幕中清理数据,并说该数据超出了该范围。