Il seguente codice utilizza semplicemente un riferimento null come parametro varargs.Vararg con parametri null in Java
package currenttime;
import java.util.Arrays;
public class Main
{
private static void temp(String...str)
{
System.out.println(Arrays.asList(str));
}
public static void main(String[] args)
{
temp(null,null);
temp(null);
}
}
La prima chiamata al metodo temp(null, null);
mostra [null, null]
significa che str[0]=null
e str[1]=null
.
ma la chiamata più tardi per temp(null);
fa sì che il NullPointerException
da buttare, che sembra che la stessa è str
null
.
Se si digita il tipo su String
qualcosa come questo temp((String)null);
, funziona e visualizza [null]
.
Perché nell'ultima chiamata è richiesto un cast di tipo esplicito? Mi sembra che sia considerato un array di stringhe con un riferimento null
diverso dalla prima chiamata. Qual è la risposta corretta?
'String str = null; Arrays.asList (str); 'funziona, perché? –
'Arrays.asList (str);' costruisce un 'java.util.List' con una voce' null' in esso. 'String str = null;' non ha assolutamente nulla a che fare con il riferimento di 'List' in fase di creazione (che non è' null'). – Tiny
@Tiny. Esattamente :) –