Там две программы Почему работает первый код код? Я ожидал, что это бросить время выполнения исключение при обращении к элементам, как строка добавляется вместо IntegerДженерики во время выполнения
Аналогично .. Второй код throwing Run time Exception при доступе к элементу, хотя он может удобно добавлять Integer в arrayList, несмотря на то, что он удерживает String.
В обоих кодов, мы успешны в добавлении различных типов данных, но проблемы, кажется, появляются в то время как доступ к элементам
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<Integer> arrayList = new ArrayList<>();
Test.addToList(arrayList);
System.out.println(arrayList.get(0));
}
public static void addToList(ArrayList arrayList) {
arrayList.add("i");
}
}
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<String> arrayList = new ArrayList<>();
Test.addToList(arrayList);
System.out.println(arrayList.get(0));
}
public static void addToList(ArrayList arrayList) {
arrayList.add(1);
}
}
Почему это разрешено «добавлять» из-за определения функции - определенная вами функция не знает, какие типы 'arrayList' ожидает (или должна допускать) - как и для ошибки времени выполнения:' String' является классом, поэтому «ArrayList» хранит ссылки (вроде подобных адресов) - если вы пытаетесь получить доступ к ячейке памяти 1, она не содержит действительного объекта «String», поэтому вы получаете ошибку времени выполнения. – UnholySheep
. Вы должны получать «ClassCastException» во время выполнения второго , – NewUser
@UnholySheep Но я не уверен, что ваш комментарий объясняет, почему первый тоже не подведет. –