在try-catch-finally
情况下,在调用方法时处理finally
的正确方法是什么?
我要问的是一个服务实现类,它使得DB调用在每个方法中都有一个finally
子句。
如果我要使用DRY方法,我不希望finally
子句继续重复相同的代码。
例如
try {
// DB call
} catch (DAOException e) {
// Error messages etc
} finally {
// entityMangerProvider is a field
EntityManager entityManager = entityManagerProvider.get();
EntityTransaction transaction = entityManager.getTransaction();
if (entityManager.isOpen()) {
if (transaction.isActive()) {
transaction.rollback();
}
entityManager.close();
}
}
上面的finally
重复出来。做这样的事情是否合适
private void closeEntityManager() {
EntityManager entityManager = entityManagerProvider.get();
EntityTransaction transaction = entityManager.getTransaction();
if (entityManager.isOpen()) {
if (transaction.isActive()) {
transaction.rollback();
}
entityManager.close();
}
}
然后执行此操作
try {
// DB call
} catch (DAOException e) {
// Error messages etc
} finally {
closeEntityManager();
}
这种方法有什么缺点吗?有没有更好的方法可以避免一遍又一遍地重复finally子句。
项目在Java 7上,如果重要的话。
答案 0 :(得分:3)
不,您的新方法方法似乎没有任何限制。可以创建方法以在代码中提供灵活性。
你只有一个entityManagerProvider
(如果从其他地方打电话,可以作为参数传递给这个新方法),然后让你继续使用所有新创建的对象和引用;所以最好定义新方法并在最后使用的地方调用它{...}。