在此代码中:
@Override
public boolean updateEntity() {
final boolean[] success = {false};
final PersistentEntityStore entityStore = manager.getPersistentEntityStore();
entityStore.executeInTransaction(
new StoreTransactionalExecutable() {
@Override
public void execute(@NotNull final StoreTransaction txn) {
doUpdateThrowsException();
success[0] = true;
}
});
return success[0];
}
什么是最好的方法,以便可以避免使用boolean
数组?
答案 0 :(得分:2)
您必须使用可变对象作为状态持有者。 AtomicBoolean
应该适合您。
显然,“最佳”方法是具有使用返回值executeInTransaction
的能力,但是由于您对该部分没有任何影响。...
我还希望您100%executeInTransaction
是一项阻止操作-该代码否则将无法正常工作。
答案 1 :(得分:1)
如果这是一个并发问题(并且您不知道何时执行代码),则可能应该使用CompletionStage<Boolean>
或其他某种Future / Promise。这样,您就可以区分出事情是否失败还是尚未运行(在任何情况下,您的数组或AtomicBoolean
都是错误的,并且您需要第二个来确定事务是否已经开始)。
如果此代码是同步的,则似乎应该有一种更直接的方法来检查您尝试检测的异常是否已引发。 executeInTransaction
不能返回数据或至少失败吗?