Hvorfor kaster Arrays.asList(null) en NullPointerException, mens Arrays.asList(someNullVariable) ikke gør det?
Forskellen handler kun om, hvordan argumentet bruges under kørsel:
Signaturen af asList
er
public static <T> List<T> asList(T... a)
Arrays.asList(returnNull())
kalder det med en Object
. Dette klart bliver ikke fortolket som et array. Java opretter et array ved kørsel og sender det som et array med én null
element. Dette svarer til Arrays.asList((Object) null)
Men når du bruger Arrays.asList(null)
, argumentet, der sendes, anses for at være et array, og da metoden eksplicit mislykkes på null-arrays, der sendes som argument (se java.util.Arrays.ArrayList.ArrayList(E[])
), får du den NPE.