Vraag Controleert java.util.List.isEmpty () of de lijst zelf null is? [duplicaat]


Deze vraag heeft hier al een antwoord:

Doet java.util.List.isEmpty() controleer of de lijst zelf is nullof moet ik deze controle zelf uitvoeren?

Bijvoorbeeld:

List test = null;

if(!test.isEmpty()) {
    for(Object o : test) {
        // do stuff here            
    }
}

Zal dit een gooien NullPointerException omdat test is null?


64
2017-07-16 20:30


oorsprong


antwoorden:


Je probeert het te bellen isEmpty() methode op a null referentie (als List test = null; ). Dit zal zeker een gooi doen NullPointerException. Je zou moeten doen if(test!=null) in plaats daarvan (controleren op null eerste).

De methode isEmpty() geeft true terug, als een ArrayList object bevat geen elementen; anders valse (voor dat de List moet eerst worden geïnstantieerd dat in uw geval is null).

Bewerk:

Misschien wil je het zien deze vraag.


80
2017-07-16 20:34



Ik zou het gebruik van Apache Commons Collections aanraden

http://commons.apache.org/proper/commons-collections/javadocs/api-release/org/apache/commons/collections4/CollectionUtils.html#isEmpty(java.util.Collection)

wat het behoorlijk goed implementeert en goed gedocumenteerd is:

/**
 * Null-safe check if the specified collection is empty.
 * <p>
 * Null returns true.
 * 
 * @param coll  the collection to check, may be null
 * @return true if empty or null
 * @since Commons Collections 3.2
 */
public static boolean isEmpty(Collection coll) {
    return (coll == null || coll.isEmpty());
}

84
2018-03-26 11:23



Deze zullen Gooi een NullPointerException - zoals elke poging om een ​​instantiemethode te gebruiken op een null verwijzing - maar in gevallen zoals deze moet u een expliciete controle uitvoeren tegen null:

if ((test != null) && !test.isEmpty())

Dit is veel beter en duidelijker dan het verspreiden van een Exception.


11
2017-07-16 20:33



Als u een methode op een nulverwijzing aanroept, resulteert dit altijd in een uitzondering. Test of het object als eerste de nul is:

List<Object> test = null;
if (test != null && !test.isEmpty()) {
    // ...
}

U kunt ook een methode schrijven om deze logica in te kapselen:

public static <T> boolean IsNullOrEmpty(Collection<T> list) {
    return list == null || list.isEmpty();
}

Dan kunt u doen:

List<Object> test = null;
if (!IsNullOrEmpty(test)) {
    // ...
}

6
2017-07-16 20:33



Nee java.util.List.isEmpty() controleert niet of een lijst nul is.

Als u Spring framework gebruikt, kunt u de CollectionUtils klasse om te controleren of een lijst leeg is of niet. Het zorgt ook voor de null gevonden. Hieronder volgt het codefragment van Spring framework's CollectionUtils klasse.

public static boolean isEmpty(Collection<?> collection) {
    return (collection == null || collection.isEmpty());
}

Zelfs als u Spring niet gebruikt, kunt u doorgaan en deze code aanpassen om uw code toe te voegen AppUtil klasse.


4
2017-08-25 03:30



Ja het zal gooi een uitzondering. misschien ben je eraan gewend PHP code, waar empty($element) controleert ook op isset($element)? In Java is dit niet het geval.

Je kunt dat gemakkelijk onthouden omdat de methode direct wordt aangeroepen op de lijst (de methode hoort bij de lijst). Dus als er geen lijst is, dan is er geen methode. En Java zal klagen dat er geen lijst is om deze methode aan te roepen.


3
2017-07-16 20:33



Naast het antwoord van Lion kan ik zeggen dat je het beter kunt gebruiken if(CollectionUtils.isNotEmpty(test)){...} Dit controleert ook op nul, dus geen handmatige controle is niet nodig.


3
2017-07-06 09:09



U kunt ook uw eigen isEmpty-methode (voor meerdere verzamelingen) gebruiken. Voeg dit toe aan je Util-klasse.

public static boolean isEmpty(Collection... collections) {
    for (Collection collection : collections) {
        if (null == collection || collection.isEmpty())
            return true;
    }
    return false;
}

1
2018-06-16 07:42