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

Java return an empty list

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

1
2
3
4
5
6
7
8
9
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
    }
}

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

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


应该这样做:

1
2
3
} else {
    return Collections.emptyList();
}


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

1
2
3
4
5
6
if (isValidLang(lang)) {
        query.setParameter("lang", lang);
        return query.getResultList();
    } else {
        return new ArrayList<Lookup>();  // return array list instance.
    }


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

1
2
3
} else {
    return List.of();
}

尝试如下:

1
2
3
4
5
6
7
8
9
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;
}


使用java中的ternary operator (boolean_expression ? statement1 : statemetn2 )可以检查每个返回类型是否为null。如果我们这样做一次,那么使用代码的每一个调用方法都会受益,因为它们不必检查null。你的代码可以这样重写-

1
2
3
4
5
6
7
8
9
10
11
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);
}