«1. Обзор

ArrayStoreException генерируется во время выполнения в Java, когда предпринимается попытка сохранить неправильный тип объекта в массиве объектов. Поскольку ArrayStoreException является непроверенным исключением, его не принято обрабатывать или объявлять.

В этом руководстве мы продемонстрируем причину ArrayStoreException, способы ее обработки и рекомендации по ее предотвращению.

2. Причины возникновения ArrayStoreException

Java генерирует исключение ArrayStoreException, когда мы пытаемся сохранить в массиве объект другого типа вместо объявленного типа.

Предположим, мы создали массив типа String, а затем попытались сохранить в нем Integer. В этом случае во время выполнения выбрасывается ArrayStoreException:

Object array[] = new String[5];
array[0] = 2;

Исключение будет выброшено во второй строке кода, когда мы попытаемся сохранить неправильный тип значения в массиве:

Exception in thread "main" java.lang.ArrayStoreException: java.lang.Integer
    at com.baeldung.array.arraystoreexception.ArrayStoreExceptionExample.main(ArrayStoreExceptionExample.java:9)

Так как мы объявили массив как объект, компиляция выполняется без ошибок.

3. Обработка исключения ArrayStoreException

Обработка этого исключения довольно проста. Как и любое другое исключение, оно также должно быть заключено в блок try-catch для обработки:

try{
    Object array[] = new String[5];
    array[0] = 2;
}
catch (ArrayStoreException e) {
    // handle the exception
}

4. Рекомендации по предотвращению этого исключения

Рекомендуется объявлять тип массива как определенный класс, например String или Integer вместо Object. Когда мы объявляем тип массива как Object, компилятор не выдает никаких ошибок.

Но объявление массива с базовым классом и последующее сохранение объектов другого класса приведет к ошибке компиляции. Давайте рассмотрим это на небольшом примере:

String array[] = new String[5];
array[0] = 2;

В приведенном выше примере мы объявляем тип массива как String и пытаемся сохранить в нем целое число. Это приведет к ошибке компиляции:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
  Type mismatch: cannot convert from int to String
    at com.baeldung.arraystoreexception.ArrayStoreExampleCE.main(ArrayStoreExampleCE.java:8)

Будет лучше, если мы поймаем ошибки во время компиляции, а не во время выполнения, поскольку у нас больше контроля над первым.

5. Заключение

В этом руководстве мы узнали о причинах, обработке и предотвращении ArrayStoreException в Java.

Полный пример доступен на GitHub.