我的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匹配。
但如果不是这样,我想返回一个空列表。我的问题是如何更新代码&amp;返回空列表的最佳方法是什么,以便代码不会失败?
答案 0 :(得分:25)
这应该这样做:
} else {
return Collections.emptyList();
}
答案 1 :(得分:6)
Collections.emptyList()
会返回 不可变列表 ,即的列表,如果您要执行任何操作,则无法添加元素在列表上操作,然后创建列表的新实例并将其返回。
if (isValidLang(lang)) {
query.setParameter("lang", lang);
return query.getResultList();
} else {
return new ArrayList<Lookup>(); // return array list instance.
}
答案 2 :(得分:3)
试试这样:
public List<Lookup> findAll(String lang) {
List<Lookup> result = new ArrayList<Lookup>();
Query query = entityManager.createNamedQuery("Lookup.findAll");
if (isValidLang(lang)) {
query.setParameter("lang", lang);
result = query.getResultList();
}
return result;
}
答案 3 :(得分:3)
通过Java 9
,您现在可以使用静态工厂方法List::of创建不可变的空列表:
} else {
return List.of();
}
答案 4 :(得分:1)
在ternary operator (boolean_expression ? statement1 : statemetn2 )
中使用java
,我们可以检查每个返回类型是否为null
。如果我们这样做一次,那么使用代码的每个调用方法都将受益,因为它们不必检查null
。您的代码可以像这样重写 -
public List<Lookup> findAll(String lang) {
Query query = entityManager.createNamedQuery("Lookup.findAll");
ArrayList lookupList = null;
if (isValidLang(lang)) {
query.setParameter("lang", lang);
lookupList = <ArrayList> query.getResultList();
}
return (null != lookupList ? lookupList : Collections.EMPTY_LIST);
}