Стиль кода: изменить много похожих перегрузок - PullRequest
0 голосов
/ 21 мая 2018

Некоторое время я писал много действительно похожих перегрузок.Возможно, я делаю что-то не так или просто не знаю некоторых языковых возможностей, чтобы сделать его более компактным.

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 голосов
/ 21 мая 2018

Это то, что вы ищете?

@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 можно изменить, поэтому его метод объявляет исключение, если это необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...