使用"final"按设计调用方法



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上,如果重要的话。

不,您的新方法方法似乎没有任何限制。可以创建方法以在代码中提供灵活性。

你只有一个entityManagerProvider(如果从其他地方调用,你可以把它作为参数传递给这个新方法),然后你就可以处理所有新创建的对象和引用;因此,定义新方法并在使用finally{…}时调用它是完美的。

相关内容

  • 没有找到相关文章

最新更新