为了减少JPA中每个属性更新的代码重复,我想将函数指针交给doTransaction并调用该函数.我怎么能在Java 8中做到这一点?
public void modifySalary(Person person, float salary) {
doTransaction(person.setSalary(salary));
}
public void doTransaction(final Function<Void, Void> func) {
em.getTransaction().begin();
func.apply(null);
em.getTransaction().commit();
}
Run Code Online (Sandbox Code Playgroud)
你可以接受一个Runnableas参数doTransaction并传递一个lambda表达式来更新这个人.在这里,我们仅使用Runnable作为功能接口来定义不带参数且不返回任何值的方法.
public void modifySalary(Person person, float salary) {
doTransaction(() -> person.setSalary(salary));
}
public void doTransaction(Runnable action) {
em.getTransaction().begin();
action.run();
em.getTransaction().commit();
}
Run Code Online (Sandbox Code Playgroud)
如果您认为Runnable这个名称在某种程度上与线程有关,那么您可以滚动自己的接口来定义一个不带参数且不返回任何值的函数方法.例如,如果要为其命名Action,则可以
@FunctionalInterface
interface Action {
void perform();
}
Run Code Online (Sandbox Code Playgroud)
然后打电话action.perform()到里面doTransaction.
| 归档时间: |
|
| 查看次数: |
666 次 |
| 最近记录: |