Java返回一个空列表

tes*_*dtv 17 java return arraylist

我有我的Java方法如下;

public List<Lookup> findAll(String lang) {
    Query query = entityManager.createNamedQuery("Lookup.findAll");
    if (isValidLang(lang)) {
        query.setParameter("lang", lang);
        return query.getResultList();
    } else {
        //return empty list
    }
}
Run Code Online (Sandbox Code Playgroud)

现在该方法返回List以获得有效的lang匹配.

但如果不是这样,我想返回一个空列表.我的问题是如何更新代码以及返回空列表的最佳方法是什么,以便代码不会失败?

Mik*_*kis 31

这应该这样做:

} else { 
    return Collections.emptyList();
}
Run Code Online (Sandbox Code Playgroud)

  • 或`new ArrayList()`,如果函数调用者想要修改返回的列表。 (4认同)
  • 对于给定的示例,这实际上可能是一个坏主意...如果客户端修改了返回的List,它将强制他们进行复制。`new ArrayList &lt;&gt;(findAll(...))`。最好不要随机混合不可变/可变。您的答案也没有说明`emptyList`会引发异常。 (2认同)

ati*_*mpi 7

Collections.emptyList()返回一个不可变列表,即,如果您想对列表执行任何操作,则不能向其添加元素的列表,然后创建列表的新实例并返回它。

if (isValidLang(lang)) {
        query.setParameter("lang", lang);
        return query.getResultList();
    } else {
        return new ArrayList<Lookup>();  // return array list instance.
    }
Run Code Online (Sandbox Code Playgroud)


Xav*_*hot 7

使用Java 9,您现在可以使用静态工厂方法List::of创建一个不可变的空列表:

} else { 
    return List.of();
}
Run Code Online (Sandbox Code Playgroud)