我有如下的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
}
}
现在,该方法返回有效匹配lang的List。
但如果不是这样的话,我想返回一个空列表,我的问题是我如何更新代码&返回一个空列表使代码不会失败的最好方法是什么?
5条答案
按热度按时间bf1o4zei1#
如果您使用的是java 9或更高版本:
如果您坚持使用9:
注:
1.这些构造是最有效的,因为它们重用了空列表的一个已有示例,所以每次请求空列表时,都不会创建新列表。然而,Java中的对象分配非常便宜,所以这不应该成为一个真正的问题。
List.of()
或Collections.emptyList()
返回的列表是***秘密地不可变的***。我的意思是它公开了变异方法,但是如果你错误地调用了其中的任何一个方法,你将遇到运行时异常。在其他比Java更好的语言中,(例如,在Scala中,)存在不可变/不可修改的集合,但Java没有这样开箱即用的东西,所以,如果你在2020年坚持使用Java,你接受了这样一种可能性,即不是你所有的集合都可以被写入,尽管事实上它们看起来都可以被写入。1.一般来说,函数是用来返回不可变的实体的,所以如果你调用一个返回集合的函数,然后你打算修改这个集合,你就做错了。如果你真的需要一个可以修改的集合,你应该写你的函数,让它填充一个可变列表,你把它作为一个参数传递给它,这样很明显你,作为可变列表的所有者,可以在函数返回后自由地进一步修改列表。
v7pvogib2#
Collections.emptyList()
返回一个**不可变的列表***,也就是说,如果你想对你的列表执行任何操作, 你不能向它添加元素,* 然后创建一个新的list示例并返回它。z2acfund3#
对于
Java 9
,现在可以使用静态工厂方法List::of来创建一个不可变的空列表:zaq34kh64#
试试这样:
xxslljrj5#
在
java
中使用ternary operator (boolean_expression ? statement1 : statemetn2 )
,我们可以检查每个返回类型是否为null
。如果我们这样做一次,那么使用该代码的每个调用方法都会受益,因为它们不必检查null
。您的代码可以重写如下-