JDBC オブジェクト (接続、ステートメント、結果セット) を使用したら、それらを閉じることを強くお勧めします。ただし、次のような大量のコードが生成されます。
Connection conn = null;
Statement stm = null;
ResultSet res = null;
try {
// Obtain connection / statement, get results, whatever...
} catch (SQLException e) {
// ...
} finally {
if (res != null) { try { res.close(); } catch (SQLException ignore) {}}
if (stm != null) { try { stm.close(); } catch (SQLException ignore) {}}
if (conn != null) { try { conn.close(); } catch (SQLException ignore) {}}
}
ここで、ヘルパー関数を実装して、オブジェクトを閉じるための (繰り返しの) コードの量を減らすことを考えました。オブジェクトを引数として取り、close()
リフレクションを使用して、各オブジェクトのメソッドを呼び出そうとします (オブジェクトにそのようなメソッドがある場合)。
public void close(Object... objects) {
for (Object object : objects) {
for (Method method : object.getClass().getMethods()) {
if (method.getName().equals("close")) {
try {
method.invoke(object);
} catch (Exception e) {
e.printStackTrace();
}
break; // break on the methods, go for the next object
}
}
}
}
finally
ブロックは次のように縮小できます。
} finally {
close(res, stm, conn);
}
それは良いことですか?いいえの場合、その理由は何ですか? 「より良い」方法はありますか?