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(); }