Sprievodca po ArrayStoreException

1. Prehľad

ArrayStoreException je hodený za behu v Jave pri pokuse o uloženie nesprávneho typu objektu do poľa objektov. Odkedy ArrayStoreException je nekontrolovaná výnimka, nie je typické ju spracovávať alebo deklarovať.

V tomto výučbe si ukážeme príčinu ArrayStoreException, ako s tým zaobchádzať a osvedčené postupy, ako sa tomu vyhnúť.

2. Príčiny ArrayStoreException

Java hodí ArrayStoreException keď sa pokúsime namiesto deklarovaného typu uložiť do poľa iný typ objektu.

Predpokladajme, že sme vytvorili inštanciu poľa s String typu a neskôr sa pokúsil uložiť Celé číslo v tom. V takom prípade počas behu ArrayStoreException je hodená:

Pole objektov [] = nový reťazec [5]; pole [0] = 2;

Výnimka bude vyvolaná v druhom riadku kódu, keď sa pokúsime do poľa uložiť nesprávny typ hodnoty:

Výnimka vo vlákne „main“ java.lang.ArrayStoreException: java.lang.Integer na adrese com.baeldung.array.arraystoreexception.ArrayStoreExceptionExample.main (ArrayStoreExceptionExample.java:9)

Keďže sme deklarovali pole ako Objekt, kompilácia je bezchybná.

3. Zaobchádzanie s ArrayStoreException

Zaobchádzanie s touto výnimkou je celkom jednoduché. Ako každá iná výnimka, aj to musí byť obklopený blokom try-catch na manipuláciu:

skus {Object array [] = new String [5]; pole [0] = 2; } catch (ArrayStoreException e) {// zvládnuť výnimku}

4. Osvedčené postupy, ktorým sa treba vyhnúť tejto výnimke

to je odporúča sa deklarovať typ poľa ako konkrétnu triedu, ako napr String alebo Celé číslo, namiesto Objekt. Keď deklarujeme typ poľa ako Objekt, potom kompilátor nevyhodí žiadnu chybu.

ale deklarovanie poľa so základnou triedou a následné ukladanie objektov inej triedy povedie k chybe kompilácie. Pozrime sa na to na krátkom príklade:

Pole reťazcov [] = nový reťazec [5]; pole [0] = 2;

Vo vyššie uvedenom príklade deklarujeme typ poľa ako String a skúste uložiť Celé číslo v tom. To povedie k chybe kompilácie:

Výnimka vo vlákne „main“ java.lang.Error: Nevyriešený problém s kompiláciou: Nezhoda typu: nemožno prevádzať z int na String na com.baeldung.arraystoreexception.ArrayStoreExampleCE.main (ArrayStoreExampleCE.java:8)

Je lepšie, keď chyby zachytíme skôr pri kompilácii ako za behu pretože máme väčšiu kontrolu nad prvou.

5. Záver

V tomto tutoriáli sme sa dozvedeli príčiny, zaobchádzanie s nimi a prevenciu ArrayStoreException v Jave.

Celý príklad je k dispozícii na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found