代码样式:更改许多类似的重载

时间:2018-05-21 13:07:02

标签: java java-8

有一段时间我一直在写很多非常类似的重载。也许我做错了什么或者只是不知道某些语言功能以使其更紧凑。

public void foo(Object bar){
    try(Transaction tx = persistence.createTransaction()){
         foo(bar,persistence.getEntityManager());
         tx.commit();
    }
}
public void foo(Object bar,EntityManager em)/*...*/

这似乎是原始的,我相信必须有一种方法来包含我不知道的类似方法。

1 个答案:

答案 0 :(得分:2)

这就是你要找的东西吗?

@FunctionalInterface
public interface TransactionRunnable {
    void runTransactionCode(EntityManager em);
}

public void runInNewTransaction(TransactionRunnable code) {
    try(Transaction tx = persistence.createTransaction()){
        code.runTransactionCode(persistence.getEntityManager());
        tx.commit();
    }
}

public void foo(Object bar, EntityManager em) { /*...*/ }
public void baz(String str, EntityManager em) { /*...*/ }

然后可以使用

在其自己的事务中调用Foo
runInNewTransaction((em) -> foo(myBar, em));

......同样......

runInNewTransaction((em) -> baz("hello", em));

显然,可以更改TransactionRunnable接口,以便其方法在需要时声明异常。