1
3
不应使用未选中的异常来验证用户输入。通常会检查异常,因为这样您就不会忘记处理异常。 验证API中使用的参数完全不同。应该取消选中这些项,否则您将最终向每个函数调用添加try/catch。每当一个方法被传递一个无效的参数时,这肯定是一个编程错误。通常的方法是抛出IllegalArgumentException或NullPointerException(或任何其他适合您需要的方法)。 在API调用中,保留
除上述之外,可恢复性对于决定选中或未选中的异常也很重要。如果您永远无法恢复(通常是在编程错误中),您可以(或应该?)接受未选中的异常。 最好不要编写不符合上述准则的代码。对于您来说,这意味着您必须编写一个函数,该函数在用于验证用户输入时返回布尔或选中的异常,在验证函数的输入参数时返回未选中的异常。当然,您可以并且应该使用相同的函数来验证异常,只需包装返回布尔或检查异常的函数:
这是一个更多的工作,但它会给你最好的两个世界。通过将validate参数函数设为私有的,可以确保不会在类之外意外地使用它。当然你也可以把
|
2
6
不,我认为您之所以在这里抛出未检查的异常是因为它涉及到该API用户违反约定的行为,而不是该方法正常运行期间的异常情况。参见JavaSDK使用的Null PosiExtExchange、ILLCALL AguMutExtExchange等,它们是 运行时异常 因为它们代表违反合同。 |
3
4
如果类的用户能够通过正确地使用API(包括不传递记录为无效的值)来避免该问题,那么这是一个编程错误,因此引发InvalidArgumentException。 |
4
2
真的,这都是关于期望。如果您希望在正常程序流下输入一个无效的输入,那么它应该是一个选中的异常,这样您就可以正常恢复。未经检查的异常是针对程序员不能做任何事情并且不希望正常发生的错误情况。 |
5
1
如果这是 真正地 它是为一个验证器类设计的,所以我希望它在允许输入的范围内具有异常的灵活性,这仅仅是因为它的存在目的是测试有效性,它不能通过抛出异常来很好地测试有效性。
|
6
1
根据经验,我总是在组件/层/api的公共接口上处理异常。这允许异常冒泡并在顶层处理。- 最后责任时刻 ,同时确保在代码中处理异常,避免 leaky exceptions . |