更清洁的方式来编写这个try / catch块? Google App Engine

时间:2014-07-30 07:05:59

标签: java google-app-engine

我在处理事务时使用try / catch。代码首先尝试获取实体,如果它捕获EntityNotFoundException,它将尝试创建实体。问题是,因为我正在处理事务,所以在放置实体时我还需要捕获ConcurrentModificationException。代码看起来有点像这样:

try {
   datastore.get(key);
} catch (EntityNotFoundException e) {
   try {
      datastore.put(entity);
   } catch (ConcurrentModificationException e) {
      // retry or log exception
   }
}

这看起来很丑陋。我想知道是否有更清晰的方式来写这个?

2 个答案:

答案 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
         }