由于我公司使用Eclipse并使用Eclipse的代码自动修复的政策,以下代码模式在代码库中显得过多:
InputStream is = null;
try {
is = url.openConnection().getInputStream();
// .....
} catch (IOException e) {
// handle error
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
// handle error
}
}
}
IMO它非常难以阅读,尤其是finally块中的部分(是否真的需要捕获2个IOException实例?)。无论如何都要简化代码,使其看起来更干净?
答案 0 :(得分:3)
为什么什么?这是工作代码。这是对的。
保持原状。
答案 1 :(得分:1)
请参阅此question,使用closeQuietly()
解决方案。
InputStream is = null;
try {
is = url.openConnection().getInputStream();
// .....
} catch (IOException e) {
// handle error
} finally {
IoUtils.closeQuietly(is);
}
// stolen from the cited question above
public class IoUtils {
public static closeQuietly (Closeable closeable) {
try {
closeable.close();
} catch (IOException logAndContinue) {
...
}
}
}
答案 2 :(得分:1)
首先,关于使用IOUtils
- 可能值得一提,告诉你的主管他们可能使用的应用服务器/ Java运行时环境,使用IOUtils
和类似的库本身。所以实质上你并没有在你的架构中引入新的组件。
第二,不,不是真的。除了编写自己的实用程序以模仿IOUtils'closeQuietly
方法之外,没有任何其他方法。
答案 3 :(得分:1)
public class Util {
public static void closeStream(inputStream is) {
if (is != null) {
try {
is.close();
} catch (IOException e) {
// log something
}
}
}
现在你的代码是
InputStream is = null;
try {
is = url.openConnection().getInputStream();
// .....
} catch (IOException e) {
// handle error
} finally {
Util.closeStream(is);
}
由于catch中的IOException可能有一些特定的处理,因此没有其他事情可做。
答案 4 :(得分:0)
您可以在某处定义类似的内容:
private static interface InputStreamCallback {
public void doIt(InputStream is) throws IOException;
}
private void with(InputStreamCallback cb) {
InputStream is = null;
// Creational code. Possibly adding an argument
try {
cb.doIt(is);
} catch (IOException e) {
// handle error or rethrow.
// If rethrow add throws to method spec.
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
// handle error or rethrow.
}
}
}
}
并调用你的代码:
with(new InputStreamCallback() {
@Override
public void doIt(InputStream is) throws IOException {
is = url.openConnection().getInputStream();
// .....
}
});
如果您在帮助程序类中使用方法static
声明,那么您甚至可以执行import static
。
有一个缺点。您需要声明url
final。
编辑:创建代码不是重点。您可以通过多种方式进行安排。回调就是重点。你可以找出你需要做的事情。