在Java(或任何其他具有已检查异常的语言)中,在创建自己的异常类时,如何确定是应该选中还是取消选中它?
我的直觉是,如果调用者能够以某种富有成效的方式恢复,那么将调用一个已检查的异常,其中未经检查的异常对于不可恢复的情况更多,但我会对其他人的想法感兴趣.
在发布这个问题并阅读那个问题后,我意识到知道一个方法是否应该返回null是非常重要的,或者如果这被认为是错误条件并且应该抛出异常.还有一个很好的讨论,何时返回'null'或抛出异常.
我正在写一个方法,我已经知道如果我想返回null或抛出异常,表达我的决定的最佳方式是什么,换句话说,记录我的合同?
我能想到的一些方法:
我主要讨论java,但它也可能适用于其他语言:为什么有一种正式的方式来表达是否会抛出异常(throws关键字)但是没有正式的方式来表达是否可能返回null?
为什么没有这样的东西:
public notnull Object methodWhichCannotReturnNull(int i) throws Exception
{
return null; // this would lead to a compiler error!
}
Run Code Online (Sandbox Code Playgroud)
表达合同的方式有很多种:
说服别人评论他们的代码有什么好的理由?
我注意到许多程序员喜欢编写代码的速度,而没有评论而是为自己和其他人留下一些文档.当我试图说服他们时,我会听到一半被烘焙的东西,比如"方法/班级名称应该说它做什么"等等.你会怎么说他们改变主意?
如果您反对评论,请发表评论.对于试图说服人们评论代码的人来说,这应该是一种资源,而不是其他.:-)
我只是碰上了这个问题有关初始化局部变量.许多答案都争论简单/可读性与稳健性.作为(远程部署)嵌入式系统的开发者,我总是喜欢稳健性,并倾向于遵循几个看似相互冲突的规则:
以允许设备继续运行的方式尽可能地处理每个错误.
在编程或致命错误发生后,尽快将代码设计为失败.
我们都经过培训,可以验证输入,防止设备因用户(或其他外部)输入而损坏; 总是假设数据可能无效并相应地进行测试.
您还遵循哪些其他具体做法来确保稳健性? 示例很有帮助,但我也对普遍适用的技术感兴趣.