2012-11-09 179 views
0

我想實現一個隊列與客體:處理空值

void addQueue(String bucket, String value){ 
    Long next = ofy().load().type(OfyQueue.class) 
      .order("-id").first().get().getId(); 
    OfyQueue q = new OfyQueue(bucket, value, next); 
    ofy().save().entity(q).now(); 
} 
void removeQueue(String bucket, String value){ 
    OfyQueue q = ofy().load().type(OfyQueue.class) 
      .filter("value", value).order("-id").first().get(); 
    ofy().delete().entity(q); 
} 

有什麼毛病此代碼:

  • next可能爲空?因此,當我創建新的OfyQueue時,它將在removeQuery方法中傳遞 空值
  • ,q也可能爲null,是否需要顯式測試q是null還是ofy()。delete()。entity will just忽略空值傳遞給它

回答

1

假設QfyQueue.getId()返回與@Id註釋的字段,它永遠不會在addQueue()方法返回null。但是,如果沒有匹配條件的元素,則first()。get()將返回null。如果您想要引發異常,則可以調用safeGet()。

在removeQueue()中,您必須明確檢查空值'q'。將null傳遞給delete方法將產生一個NPE。