如果方法检查它的输入并检测到非法输入,它应该怎么做:引发异常(或使用其他错误机制)或什么都不做/忽略错误的输入?
在Java中,如果将null-references作为参数给出,则HashTable类会抛出NullPointerException。这有时很烦人,但我认为它可能有优势,因为错误很早就被捕获了。其他一些方法忽略了非法输入,什么都不做。这不那么烦人,通常没有什么不好的事情发生,但可能有这种情况,那么这种行为会引起头痛 - 或者不是?
我不确定,哪种方式更好。所以我问你:你对这个问题有何看法?
答案 0 :(得分:8)
绝对抛出异常。例外情况令人讨厌,迫使你做某事。
以这种方式思考,如果你的程序对输入错误没有任何作用,你应该如何让用户知道什么都没发生?为什么?此外,您需要多长时间来调试在错误条件下什么都不做的程序?
答案 1 :(得分:4)
我认为取决于您正在处理的上下文或抽象层。最重要的是保持一致。如果您在该级别中抛出异常,请继续抛出异常。如果没有,请检查图层的行为方式并执行相同操作。
答案 2 :(得分:2)
这在很大程度上取决于您正在开发的应用程序。
尽管非法输入进行士兵训练可能意味着该计划的输出不正确,对于计算药物剂量的应用来说,这将是一件非常糟糕的事情。另一方面,如果没有任何灾难性后果,那么什么都不做可能会没问题。
另一种选择是将非法输入更改为最接近的合法值(例如,如果整数的范围是0 - 100,并且您收到-10,则可以将其设置为0并继续处理)。 / p>
您应该尝试考虑如何处理您正在编写的特定方法中的错误以及错误处理将如何影响整个应用程序的可能后果。
答案 3 :(得分:2)
假设这是一个公共方法,方法与调用此方法的方法之间的契约是什么?
如果您正在编写此方法,那么合同就是设计的一部分。你可以选择
最后,它实际上取决于方法的作用以及对方法的期望。
您可以将Class替换为方法并使用相同的选项。
在某些情况下,您可能无法引发异常 - 即固件嵌入式微控制器。在这些情况下,您必须拥有一个专门用于处理错误输入并继续处理有效输入的流程。
干杯,
-R
答案 4 :(得分:1)