2012-06-21 1 views
0

Je voudrais trouver une API comme Apache Commons qui retournera facilement et toujours une collection.Comment garantir la collection Java

Le but est de produire du code qui ne nécessite pas les chèques ou NPE vérifie CollectionUtils.isNotEmpty avant itération de collecte. L'hypothèse dans le code est de toujours garantir une instance de liste éliminant ainsi la complexité du code pour chaque itération de collection.

Voici un exemple d'une méthode, mais je voudrais une API au lieu de rouler mon propre. Je voudrais trouver une API/méthode générique qui pourrait être utilisée pour n'importe quelle classe génériquement.

Voici quelques-unes de mes cours de recherche à l'intérieur communes qui peuvent aider à me faire l'affaire. http://commons.apache.org/collections/apidocs/org/apache/commons/collections/TransformerUtils.html

http://commons.apache.org/collections/apidocs/org/apache/commons/collections/CollectionUtils.html

Peut-être que le .Recueillir pourrait fonctionner à l'aide d'un transformateur.

Je suis ouvert à l'aide d'API alternative est aussi bien.

+4

Solution alternative non-API: ne jamais retourner une collection nulle! – assylias

+0

Et que voulez-vous que la bibliothèque fasse quand il ne reste plus de mémoire? –

+0

@PaulTomblin Typiquement la plupart des codes sur lesquels j'ai travaillé, la collection est ajoutée sur la pile et est immédiatement placée sur le gc car elle n'est pas référencée. De plus, nous ne conservons pas longtemps les collections en interne. Je pense que le problème est muet. Bien que je préférerais m'éloigner de Java parce que c'est un énorme cochon d'empreinte mémoire en général. –

Répondre

3

Est-ce un exemple de ce que vous voulez dire?

public static <T> List<T> nullToEmpty(List<T> list) { 
    if (list != null) { 
     return list; 
    } 

    return Collections.emptyList(); 
} 
+2

Il convient d'ajouter que Collections.emptyList est immuable, donc en fonction de l'utilisation, il peut être utile de renvoyer un 'new xxxList'. – assylias

+0

Je suis allé avec votre solution avec suggestion assylias ainsi. C'est un petit compromis jusqu'à ce que j'ai trouvé une API externe qui a réellement ce comportement. En outre, @Jesper a utilisé l'autoboxing que je voulais aussi éliminer les avertissements embêtants en Java. Merci a tous. Si vous trouvez une API externe qui a ce hors de la boîte, s'il vous plaît poster. –

0

Votre question est un peu difficile à comprendre, Est-ce que vous voulez simplement éviter NPE, ou si vous voulez aussi éviter CollectionUtil.isNotEmpty? Le premier est très facile, le second pas, car vous voulez essentiellement garantir que votre API retournera toujours une Collection avec au moins un élément. Il s'agit d'une contrainte métier centrée sur l'IMO, et non d'une chose que vous pouvez garantir via un contrat d'API.

Si tout ce que vous voulez éviter est NPE, vous pouvez utiliser java.lang.Collections.EMPTY_ (SET | CARTE | LIST), classes. Mais attention, ceux-ci sont immuables, c'est-à-dire le code appelant, ne peuvent pas ajouter d'objets à une collection retournée de cette façon. Si vous voulez que le code appelant mute la collection (c.-à-d. Ajouter/supprimer/mettre à jour les éléments), vous devrez retourner une implémentation concrète zéro de votre LIST | MAP | SET etc.