private void readList(ArrayList list){
list.add("Hello");
list.add(2);
}
public void run(){
setFont("Courier-24");
ArrayList<Integer> list = new ArrayList<Integer>();
readList(list);
println("list = "+list);
println("Type of list[1] = "+list.get(1).getClass());
}
Результат:
список = [Hello, 2]
Тип списка [1] = класс java.lang.Integerпример типа стирания и мое понимание
public void run(){
setFont("Courier-24");
ArrayList<Integer> list = new ArrayList<Integer>();
readList(list);
println("list = "+list);
println("Type of list[0] = "+list.get(0).getClass());
}
Результат:
список = [Hello, 2]
Исключение в потоке java.lang.ClassCastException "Thread-2":
java.lang.String не может быть приведен к java.lang.Integer
После прочтения что-то о type erasure
, я получил мое предположение:
Когда я называю readList(list)
, это на самом деле добавив вещи в список, который ' ложно "рассматривается как тип ArrayList
, поэтому нет ошибки (это мое понимание так называемого type erasure
). Но если я назову println("Type of list = "+list.get(0).getClass());
в run()
, наступает ошибка, потому что list[0]
имеет тип String
(тогда как println("Type of list = "+list.get(1).getClass());
не потому, что список [1] имеет тип Integer
).
Как будто какой-то преступник сбежал с места преступления сначала (потому что он принадлежит нормальным людям, а нормальные люди имеют свободу), а позже, когда полиция начинает проверять всех, кто был вокруг, его поймали, потому что он преступник в глубине ?
* «Как будто какой-то преступник сбежал с места преступления сначала (потому что он принадлежит нормальным людям, а нормальные люди имеют свободу), а позже, когда полиция начинает проверять всех, кто был вокруг, его поймали, потому что он преступник в глубине? »Да, это так. – Radiodef