【发布时间】:2019-05-06 14:35:33
【问题描述】:
我对 Java 还很陌生,我正在努力了解异常以及何时应该使用它们。我一直将它们用作错误检查的一种形式,但我遇到几个人说异常只能用于程序无法控制的事情,例如用户错误。
我有一个函数,对于给定的二维线,计算 xMin 和 xMax 之间的所有 y 值。如果直线是垂直的,此函数将引发异常,因为不可能计算垂直线上的所有 y 值。还有一个等效的函数可以在两个 y 值之间查找点,如果直线是水平的,则会引发错误。
findPointsInRangeOfX (int xMin, int xMax) throws LineIsVerticalException {
// check if line is vertical
// if vertical, throw an exception
// else calculate the y values for each integer between xMin and xMax
// return y values
}
我将此函数称为查找给定窗口内一条线上所有点的一部分,由最小和最大 x 和 y 值给出。我不检查此功能中的线是否垂直;相反,我依靠检查 findPointsInRangeOfX 并在方法周围使用 try 和 catch 块。
pointsInWindow (int xMin, int xMax, int yMin, int yMax) {
try {
// Find list of all the points between xMin and xMax.
// Remove from list all points not between yMin and yMax
}
catch (LineIsVerticalException e) {
// If line is vertical, cannot find points between xMin and xMax
try {
// Instead, find list of all points between yMin and yMax
// Remove from list all points not between xMin and xMax
}
catch (LineIsHorizontalException e) {
// This part will never be reached because the line is vertical
// But the compiler complains if the exception isn't caught
}
}
}
这样好吗?我不会因为这样的错误抛出异常 - 有一条垂直线没有任何问题 - 但我用它来告诉 pointsInWindow 它需要找到 y 值而不是 x 值之间的点。我是否应该复制检查以查看 pointsInWindow 函数中的线是否垂直,而不是使用 try catch 块?如果我确实重复了检查,我应该一起摆脱 LineIsVerticalException 吗?
【问题讨论】:
-
你可能会发现一些关于何时抛出异常的堆栈流很有趣stackoverflow.com/questions/77127/when-to-throw-an-exception 以及这个带有指向其他材料的链接stackoverflow.com/questions/15542608/…