我正在尝试用Objectify实现一个队列:

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将忽略传递给它的null值

最佳答案

假设QfyQueue.getId()返回带有@Id注释的字段,则它将永远不会在addQueue()方法中返回null。但是,如果没有符合条件的元素,则first()。get()将返回null。如果要抛出异常,可以调用safeGet()。

在removeQueue()中,您必须显式检查是否为空'q'。将null传递给delete方法将产生一个NPE。

07-26 07:45