代码风格:更改大量类似的重载



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

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

它只是看起来很原始,我相信一定有一种方法可以包装我不知道的类似方法。

像这样的东西是你要找的吗?

@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接口,以便其方法在需要时声明异常。

最新更新