Return 方法中的文档
Return a Document in a method
当在方法中 returning 对象(如 Document
)和创建不是 implements AutoCloseable
我经常看到在第一行声明对象并 returning它在最后:
public Document myMethod() {
Document document = null
try {
document = docFactory.newDocumentBuilder().newDocument();
//...work on document
} catch(Exception e) {
// Handle Exception
}
return document;
}
似乎以下规则总是正确的,在 try 子句中创建和 return(并且可以将此代码提取到方法中)
public Document myMethod() {
try {
Document document = docFactory.newDocumentBuilder().newDocument();
//...work on document
return document;
} catch(Exception e) {
// Handle Exception
}
return null;
}
我错过了什么吗? (您可以联系到 null
可以是默认值但不太重要的情况)
除了第二个代码块有一个 catch(Exception e
) 子句之外,它们实际上是等价的。
对于此代码,是否要使用是偏好问题
- 在
try
块外将变量初始化为 null,并在末尾 returning 对象
- 在 try 块中声明变量,并在末尾 return 声明 null
如果您想在 try 块外对 Object o
进行操作,那么您需要在块外初始化变量,以便它在适当的范围内可用。
一些编码人员遵循一个约定,他们尝试每个方法只有 1 个 return 语句。 (我不是他们中的一员)。
对于您的要求,这似乎是个人喜好问题。
在一个方法的末尾只有一个 return
语句曾经被当作一种风格指南来教授,以提高可读性。或许只是出于习惯,在做没有既定风格的项目时,我仍然偏爱相反。
但是,它真正发挥作用的唯一情况是长而复杂的方法,无论如何都应该分解。
鉴于良好的编码实践(例如测试适当的单元测试覆盖率,因此您知道您在任何相关条件下返回正确的东西,包括异常)这真的只是 team/project 偏好的问题。
这里的大多数 answers/comments 表明这两种方法之间没有真正的区别,它们在功能上是相同的,这只是一个偏好问题。
这不是真的,有一个非常重要的功能差异。如果在 //...work on document
中发生异常,第一个解决方案将 return 一个未完成或可能损坏的文档(除非 return null;
在 // Handle Exception
块中),而第二个选项将 return 为空。
因此,我建议使用选项 2),因为它降低了损坏文档被 return 从您可能不会立即注意到的方法编辑并可能导致其他地方出现问题的风险,而 returning null
清楚地表明您的方法出了问题。
当在方法中 returning 对象(如 Document
)和创建不是 implements AutoCloseable
我经常看到在第一行声明对象并 returning它在最后:
public Document myMethod() {
Document document = null
try {
document = docFactory.newDocumentBuilder().newDocument();
//...work on document
} catch(Exception e) {
// Handle Exception
}
return document;
}
似乎以下规则总是正确的,在 try 子句中创建和 return(并且可以将此代码提取到方法中)
public Document myMethod() {
try {
Document document = docFactory.newDocumentBuilder().newDocument();
//...work on document
return document;
} catch(Exception e) {
// Handle Exception
}
return null;
}
我错过了什么吗? (您可以联系到 null
可以是默认值但不太重要的情况)
除了第二个代码块有一个 catch(Exception e
) 子句之外,它们实际上是等价的。
对于此代码,是否要使用是偏好问题
- 在
try
块外将变量初始化为 null,并在末尾 returning 对象 - 在 try 块中声明变量,并在末尾 return 声明 null
如果您想在 try 块外对 Object o
进行操作,那么您需要在块外初始化变量,以便它在适当的范围内可用。
一些编码人员遵循一个约定,他们尝试每个方法只有 1 个 return 语句。 (我不是他们中的一员)。
对于您的要求,这似乎是个人喜好问题。
在一个方法的末尾只有一个 return
语句曾经被当作一种风格指南来教授,以提高可读性。或许只是出于习惯,在做没有既定风格的项目时,我仍然偏爱相反。
但是,它真正发挥作用的唯一情况是长而复杂的方法,无论如何都应该分解。
鉴于良好的编码实践(例如测试适当的单元测试覆盖率,因此您知道您在任何相关条件下返回正确的东西,包括异常)这真的只是 team/project 偏好的问题。
这里的大多数 answers/comments 表明这两种方法之间没有真正的区别,它们在功能上是相同的,这只是一个偏好问题。
这不是真的,有一个非常重要的功能差异。如果在 //...work on document
中发生异常,第一个解决方案将 return 一个未完成或可能损坏的文档(除非 return null;
在 // Handle Exception
块中),而第二个选项将 return 为空。
因此,我建议使用选项 2),因为它降低了损坏文档被 return 从您可能不会立即注意到的方法编辑并可能导致其他地方出现问题的风险,而 returning null
清楚地表明您的方法出了问题。