关于arraylist:Java返回一个空列表

您所在的位置:网站首页 java返回一个list 关于arraylist:Java返回一个空列表

关于arraylist:Java返回一个空列表

2022-12-31 17:16| 来源: 网络整理| 查看: 265

我有我的Java方法作为下面.

123456789public List findAll(String lang) {     Query query = entityManager.createNamedQuery("Lookup.findAll");     if (isValidLang(lang)) {         query.setParameter("lang", lang);         return query.getResultList();     } else {         //return empty list     } }

现在该方法returns名录的有效匹配的大厅。

但如果那不是我想要的情况,返回一个空荡荡的大名单。我的问题是我如何更新代码与什么是最好的方式,比一个空荡荡的归来,并不列出代码不会不?

应该这样做:

123} else {     return Collections.emptyList(); } 相关讨论 如果函数调用方想要修改返回的列表,则返回new ArrayList()。 对于给定的例子来说,这可能是一个坏主意…如果客户端修改返回的列表,它将强制它们进行复制。new ArrayList(findAll(...))。最好不要随机混合不可变的。你的回答也不能解释emptyList抛出异常。 如果是我的话,我会声明方法返回一个EDCOX1,3个,但是Java的盒子里没有这样的东西。 完美回答迈克!

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

123456if (isValidLang(lang)) {         query.setParameter("lang", lang);         return query.getResultList();     } else {         return new ArrayList();  // return array list instance.     }

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

123} else {     return List.of(); }

尝试如下:

123456789public 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。你的代码可以这样重写-

1234567891011public 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); }



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3