В этой статье анализируется метод изменения списка и массива в Java. Поделитесь этим для всех для вашей ссылки. Специфика заключается в следующем:
Сегодня я написал код, чтобы столкнуться с странной проблемой. следующее:
Arraylist <string> list = new ArrayList <string> ();
Я думаю, что таким образом не должно быть проблем в написании кода, и нет проблем с компиляцией. Однако, когда конкретная операция выполняется, отчет является ненормальным, следующим образом: исключение в потоке «Main» java.lang.classcastException: [ljava.lang.object;
Но нет никаких проблем с написанием так:
Arraylist <string> list = new ArrayList <string> (); list.get (i);}
Мы можем объяснить это явление: Java разрешает преобразование вверх и вниз, но является ли это преобразование успешным на основе типа этого объекта в виртуальной машине Java. Виртуальная машина Java сохраняет тип каждого объекта. Массив также является объектом. Тип массива [ljava.lang.object. Преобразование [ljava.lang.object в [ljava.lang.string, очевидно, невозможно, потому что это нисходящее преобразование, а виртуальная машина сохраняет только массив объектов. Массив является элементом в массиве, это строка, поэтому это преобразование не может быть успешным. Элементы в массиве представляют собой только ссылки элемента, а не конкретный элемент хранения, поэтому тип элемента в массиве все еще хранится в виртуальной машине Java.
Согласно вышеуказанному объяснению, мы можем подвести итоги этой проблемы под следующую модель:
Object objs [] = новый объект [10];
Это то же самое, что и вышеупомянутая компиляция. Если мы изменим этот код следующим образом:
String strs [] = новая строка [10];
Это может быть скомпилировано и передано. Таким образом, мы можем приписать эту проблему проблеме правила преобразования Java. Давайте поговорим о поддержке массива Java на модели.
JDK5 уже имеет поддержку типов моделей, которые могут обеспечить безопасность типов данных в сборе и карте. Лично я должен вернуть соответствующий T [] в соответствии с моделью. Посмотрите на исходный код JDK и обнаружите, что список имеет два способа преобразования в массив:
общественный объект [] toarray ();
Этот метод возвращает все элементы в списке в массив одного и того же размера, и все элементы в массиве являются типом объекта.
public <t> t [] toarray (t [] a);
Этот метод возвращает все элементы в списке в массив одного и того же размера, и все элементы в массиве являются T -типом.
Список разработан, потому что компилятор Java не позволяет нам иметь новые массивы моделей. То есть вы не можете определить такой массив, как это:
T arr = new t [size];
Но вы можете использовать T [] для представления массива, и вы можете преобразовать массив в t []. Например, публика <t> t [] toarray (t [] a) в списке реализована:
public <t> t [] toarray (t [] a) {if (a.length <размер) a = (t []) java.lang.reflect.array.newinstance (a.getClass (). getComponentType (), GetComponentType (), size);
Из приведенного выше кода можно увидеть, что, поскольку вы не знаете тип этого массива, вы должны создать этот массив с помощью механизма отражения (a.getClass (). GetComponentType (), чтобы получить тип элемента массива).
В конце концов, список преобразуется в массив, чтобы справиться с этим ::
Arraylist <string> list = new Arraylist <string> ();
И наоборот, что, если вы хотите преобразовать массив в список? следующее:
String [] s = {"a", "b", "c"};
Есть надежда, что эта статья полезна для дизайна программы Java каждого.