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