用方法返回文档

时间:2018-08-29 13:12:49

标签: java return-value default-value

在方法中返回对象(如Document时,创建不是implements AutoCloseable时,我经常看到声明对象的第一行并在最后返回:

public Document myMethod() {
 Document document = null
 try {
    document  = docFactory.newDocumentBuilder().newDocument();
    //...work on document 
 } catch(Exception e) {
   // Handle Exception
 }
 return document;
}

以下规则似乎总是正确的,在try子句中创建并返回(并且可以将此代码提取到method)

public Document myMethod() {

 try {
    Document document  = docFactory.newDocumentBuilder().newDocument();
    //...work on document
    return document;
 } catch(Exception e) {
    // Handle Exception
 }
 return null;
}

我错过了什么吗? (您可以将null设为默认值,但重要性不高的情况)

3 个答案:

答案 0 :(得分:1)

在方法的末尾仅包含一个return语句曾经被教为提高可读性的样式指南。也许仅仅是出于习惯,当我从事的项目没有既定风格时,仍然是我的偏爱。

但是,真正起作用的唯一情况是很长的复杂方法,无论如何应该分解。

给出良好的编码习惯(例如,测试适当的单元测试范围,因此您知道在任何相关条件下(包括例外情况)都将返回正确的内容),这实际上只是团队/项目偏好的问题。

答案 1 :(得分:0)

除了第二个代码块具有catch(Exception e)子句之外,它们实际上是等效的。

对于此代码,是否愿意优先考虑

  • try块之外将变量初始化为null,然后在末尾返回对象
  • 在try块中声明变量,并在末尾返回null

如果您想在try块外的Object o上进行操作,则需要在该块外初始化变量,以使其具有适当的作用域和可用范围。

某些编码器遵循约定,即每个方法仅尝试使用1个return语句。 (我不是其中之一)。

对于您的要求,这似乎是个人喜好问题。

答案 2 :(得分:0)

这里的大多数答案/评论表明,这两种方法之间并没有真正的区别,并且它们在功能上是相同的,而这只是偏好问题。

这是不正确的,在功能上有非常重要的区别。如果//...work on document中发生异常,则第一个解决方案将返回未完成或可能损坏的文档(除非return null;块中的// Handle Exception是),而第二个选项将返回null。

因此,我建议使用选项2),因为它可以减少从方法中返回损坏的文档的风险,这种方法您可能不会立即注意到,并且可能导致其他问题,而返回null是明确的表示您的方法出了点问题。