web-dev-qa-db-fra.com

Java retourne une liste vide

J'ai ma Java comme ci-dessous;

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
    }
}

Maintenant, la méthode retourne List pour les correspondances valides de lang.

Mais si ce n'est pas le cas, je veux retourner une liste vide. Ma question est de savoir comment mettre à jour le code et quelle est la meilleure façon de renvoyer une liste vide afin que le code n'échoue pas?

16
testndtv

Cela devrait le faire:

} else { 
    return Collections.emptyList();
}
27
Mike Nakis

Collections.emptyList() renvoie une liste immuable , c'est-à-dire une liste à auquel vous ne pouvez pas ajouter d'éléments si vous souhaitez effectuer une opération sur votre liste, puis créez une nouvelle instance de liste et renvoyez-la.

if (isValidLang(lang)) {
        query.setParameter("lang", lang);
        return query.getResultList();
    } else {
        return new ArrayList<Lookup>();  // return array list instance.
    }
6
atish shimpi

Avec Java 9, vous pouvez maintenant utiliser la méthode d'usine statique List :: of pour créer une liste vide immuable:

} else { 
    return List.of();
}
3
Xavier Guihot

Essayez-le comme ceci:

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
Kiki

En utilisant ternary operator (boolean_expression ? statement1 : statemetn2 ) dans Java nous pouvons vérifier chaque type de retour s'il s'agit de null. Si nous le faisons une fois, toutes les méthodes d'appel utilisant le code en bénéficieront car elles n'ont pas à vérifier avec null. Votre code peut être réécrit comme ceci -

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);
} 
1
Razib