我在处理事务时使用try / catch。代码首先尝试获取实体,如果它捕获EntityNotFoundException,它将尝试创建实体。问题是,因为我正在处理事务,所以在放置实体时我还需要捕获ConcurrentModificationException。代码看起来有点像这样:
try {
datastore.get(key);
} catch (EntityNotFoundException e) {
try {
datastore.put(entity);
} catch (ConcurrentModificationException e) {
// retry or log exception
}
}
这看起来很丑陋。我想知道是否有更清晰的方式来写这个?
答案 0 :(得分:0)
您可以使用方法来保持平稳。
try {
datastore.get(key);
} catch (EntityNotFoundException e) {
createEntity(entity);
}
private void createEntity(Object entity){ //Replace Object with the correct type
try{
datastore.put(entity);
}catch (ConcurrentModificationException e) {
//Handling both errors
}
}
这将稍微解开try-catch-blocks。
答案 1 :(得分:0)
尝试创建一个单独的方法,例如
public static KeyValue get(DataStore datastore, Key key){ //assume this method is in Util class
try {
return datastore.get(key);
} catch (EntityNotFoundException e) {
return null;
}
}
//现在实施
KeyValue value = Util.get(datastore, key);
if(value!=null){
// do your steps
}
else{
// create
}