Perché è possibile inserire un String
in un List<Integer>
nel seguente codice? Ho una classe che inserisce numeri in una lista di interi:Perché non aggiungere (stringa) su un elenco <Integer> passato a un parametro Elenco per generare un'eccezione?
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
list.add(2);
list.add(3);
list.add(4);
Inserter inserter = new Inserter();
inserter.insertValue(list);
System.out.print(list);
}
}
Poi ho una classe separata che inserisce un String
in un List
, con il valore stringa numerica "42"
:
public class Inserter {
void insertValue(List list)
{
list.add(new String("42"));
}
}
Perché il compilatore non genera un errore del compilatore o il runtime genera un'eccezione di runtime come *CastException
, quando aggiungo il String
all'elenco di numero intero? Inoltre, perché lo System.out.print(list)
produce output come il seguente senza generare eccezioni?
[2, 3, 4, 42]
Qual è la ragione fondamentale che consente a tutto questo di accadere?
che un'eccezione compilatore cosa si aspetta? –
Da dove hai preso il codice? La mia ipotesi è che il punto sia spiegare come vengono passati gli argomenti in Java, osservando che è un * riferimento * alla lista che viene passata al metodo (in base al valore), non una copia dell'oggetto lista. O forse è pensato per dimostrare i tipi non elaborati. Non è del tutto chiaro dove ti aspetteresti un errore. Potresti chiarire la domanda per favore? –
Penso che sia confuso su come un 'new String (" 42 ")' può essere inserito in un valore che è stato originariamente dichiarato come 'Elenco'. –
August