我使用java语言,我有一个方法,如果它被找到,应该返回一个对象。
如果没有找到,我是否应该:
返回null 抛出异常 其他
哪一个是最好的实践或习语?
我使用java语言,我有一个方法,如果它被找到,应该返回一个对象。
如果没有找到,我是否应该:
返回null 抛出异常 其他
哪一个是最好的实践或习语?
当前回答
首选返回null——
如果调用者在不检查的情况下使用它,异常就会在那里发生。
如果调用者并没有真正使用它,不要给他一个try/catch块
其他回答
不要认为任何人都提到了异常处理中的开销——需要额外的资源来加载和处理异常,所以除非它是一个真正的应用程序杀死或进程停止事件(继续下去会造成更多的伤害而不是好处),否则我会选择返回一个调用环境可以解释为它认为合适的值。
如果对于客户端代码来说,知道已找到和未找到之间的区别很重要,并且这应该是一个例程行为,那么最好返回null。然后客户端代码可以决定要做什么。
只要它应该返回对象的引用,返回NULL就应该很好。
然而,如果它返回整个该死的东西(就像在c++中,如果你用'return blah;'而不是'return &blah'(或者'blah'是一个指针),那么你不能返回NULL,因为它不是'object'类型。在这种情况下,抛出异常或返回一个没有成功标志集的空白对象是我处理问题的方式。
如果您总是希望找到一个值,那么如果缺少该值则抛出异常。这个例外意味着有问题。
如果该值可以缺失或存在,并且两者都对应用程序逻辑有效,则返回null。
更重要的是:在代码的其他地方做什么?一致性很重要。
我同意这里的共识(如果“未找到”是一个正常的可能结果,则返回null,或者如果情况的语义要求始终找到对象,则抛出异常)。
然而,根据你的具体情况,还有第三种可能是有意义的。您的方法可以在“not found”条件下返回某种类型的默认对象,允许调用代码确保它总是接收到有效的对象,而不需要进行空检查或异常捕获。