假设我有一个方法'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;必须被捕获或声明被抛出”
如何在不创建新位置对象的方法的方法签名中声明“throws”的情况下完成此工作?
3 回答
转到类
InvalidPositionException
并使其继承自RuntimeException
.RuntimeException
是未经检查的异常,这意味着编译器不会强制您处理它们 . 当你离开数组的界限时,这是一个很好的例子 . 每次访问数组时都不必编写处理此问题的代码(比如我们如何处理IOException
) . 类似的例子是NullPointerException
. 但是,在这两种情况下,您都可以编写代码来捕获异常并处理它 .如果你是一个经过检查的例外纯粹主义者并且不想要一个
try-catch
块,另一种处理问题的方法是在你输入数据的任何屏幕上清理数据并说它在那里超出界限 .来自Joshua Bloch的Effective Java
此代码是为其创建IllegalArgumentException的经典示例 . 它扩展了RuntimeException,因此您不需要捕获它 .
附:你可能只需要
this.x = x
替换setX(x)
,y代替相同(如果那些setter中没有额外的逻辑) .您需要在创建Position对象的语句周围包含
try-catch
块 .