gpt4 book ai didi

java - 从客户端角度来看有效的无效输入抛出哪个异常

转载 作者:IT老高 更新时间:2023-10-28 21:03:35 25 4
gpt4 key购买 nike

我正在编写代码来查找和交叉 2 行。当线的斜率相等时,它们不相交。但另一方面,具有相等斜率的输入是完全有效的。

public static Point calculateIntersection(Line line1, Line line2) {

if (line1 == null || line2 == null) {
throw new NullPointerException(" some message ");
}

if (line1.getConstant() == line2.getConstant()) {
return new Point(0, line1.getConstant());
}

if (line1.getSlope() == line2.getSlope()) {
throw new IllegalArgumentException("slopes are same, the lines do not intersect.");
}

int x = (line2.getConstant() - line1.getConstant()) / (line1.getSlope() - line2.getSlope());
int y = line1.getSlope() * x + line1.getConstant();

return new Point(x, y);
}

问题是抛出非法参数异常是正确的做法吗?由于输入是有效的,它并不能完全说服我。

自定义异常是正确的做法吗?听起来是个不错的选择,但额外的意见会有所帮助。

谢谢

最佳答案

The question is is throwing illegal argument exception the right thing to do?

这取决于您希望/需要如何“框定”这种情况;即它是错误、用户输入错误还是程序应该能够处理的东西?

  • 如果两条线不相交的情况无疑是一个“错误”,那么 IllegalArgumentException 就可以了。这就是异常的目的。 (注意这是一个unchecked异常,所以期望它不会被捕获/恢复。)

  • 如果您希望程序能够自行恢复,那么自定义异常是最好的主意。这样,您可以减少代码被(比如说)一个库方法抛出(比如说)一个 IllegalArgumentException ...而不是意味着“两条线相交”之外的东西而混淆的可能性。

  • 如果您希望将这种情况作为输入验证的一部分报告给最终用户,那么一般的“验证错误”异常可能比特定的自定义异常更合适。但是,此方法看起来并不是为(仅)用于用户输入验证而设计的。


在某些情况下,根本不抛出异常可能会更好,但是(IMO)这不是这些情况之一。替代方法是返回 null 或返回 意味着“没有这样的点”给调用代码的 Point 值。替代方案的问题是:

  • 如果您返回 null 应用程序必须处理 null 情况...否则会有 NPE。
  • 没有自然的 Point 实例可以用来表示“不是一个点”。

这并不是说您无法使这些替代方案发挥作用。只是在这种情况下,可能要做更多的工作,而可能不会有切实的返回。

关于java - 从客户端角度来看有效的无效输入抛出哪个异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17015946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com