Triedy balíkov v jazyku Java

1. Prehľad

Ako už názov napovedá, súhrnné triedy sú objekty zapuzdrujúce primitívne typy Javy.

Každý primitív Java má zodpovedajúci obal:

  • boolean, byte, short, char, int, long, float, double
  • Boolean, Byte, Short, Character, Integer, Long, Float,Dvojitý

Všetky sú definované v java.lang balíka, preto ich nemusíme importovať manuálne.

2. Triedičky obalov

"Aký je účel triedy obálky?". Je to jedna z najbežnejších otázok pri rozhovoroch s Java.

V podstate všeobecné triedy pracujú iba s objektmi a nepodporujú primitívne funkcie. Výsledkom je, že ak s nimi chceme pracovať, musíme primitívne hodnoty previesť na obalové objekty.

Napríklad Java Collection Framework pracuje výlučne s objektmi. Dávno, keď (pred jazykom Java 5, takmer 15 rokov dozadu) neexistoval autoboxing a napríklad sme nemohli jednoducho zavolať pridať (5) na zbierke Celé čísla.

V tom čase tie primitívne hodnoty bolo potrebné manuálne previesť na zodpovedajúce obalové triedy a uložené v zbierkach.

Dnes s autoboxom to ľahko zvládneme ArrayList.add (101) ale interne Java prevádza primitívnu hodnotu na Celé číslo pred uložením do ArrayList pomocou hodnota() metóda.

3. Premena triedy primitívnych na obaľovacie

Teraz je veľká otázka: ako prevedieme primitívnu hodnotu na zodpovedajúcu triedu obalov, napr. an int do Celé číslo alebo a char do Postava?

Na prevedenie primitívnej hodnoty na objekt triedy wrapper môžeme použiť buď konštruktor, alebo statické továrenské metódy.

Od Javy 9 však konštruktory pre mnoho zabalených primitívov ako napr Celé číslo alebo Dlhé boli ukončené.

Takže dôrazne sa odporúča používať iba továrenské metódy v novom kóde.

Pozrime sa na príklad premeny int hodnota na Celé číslo objekt v Jave:

Celočíselný objekt = nové celé číslo (1); Celé číslo anotherObject = Integer.valueOf (1);

The hodnota() metóda vráti inštanciu predstavujúcu zadané int hodnotu.

Vráti hodnoty z medzipamäte, vďaka čomu je efektívny. Vždy ukladá do pamäte hodnoty medzi -128 až 127, ale môže ukladať do pamäte aj ďalšie hodnoty mimo tohto rozsahu.

Podobne môžeme aj prevádzať boolovský do Booleovský, bajt do Byte, char do Postava, dlhá do Dlhý, plavák do Plavák, a dvojitý do Dvojitý. Aj keď, ak musíme prevádzať reťazec na celé číslo, musíme použiť parseInt () metóda pretože String nie je trieda obálky.

Na druhej strane, na prevod z objektu wrapper na primitívnu hodnotu môžeme použiť zodpovedajúcu metódu ako napr intValue (), doubleValue ()atď:

int val = object.intValue (); 

Komplexný odkaz nájdete tu.

4. Autoboxing a Unboxing

V predchádzajúcej časti sme si ukázali, ako ručne previesť primitívnu hodnotu na objekt.

Po Jave 5 túto konverziu je možné vykonať automaticky pomocou funkcií nazývaných autoboxing a unboxing.

„Box“ označuje prevod primitívnej hodnoty na zodpovedajúci obalový objekt. Pretože sa to môže stať automaticky, je to známe ako autoboxing.

Podobne keď je obalový objekt rozbalený do primitívnej hodnoty, je to známe ako unboxing.

To v praxi znamená, že môžeme odovzdať primitívnu hodnotu metóde, ktorá očakáva objekt wrapperalebo priraďte primitív k premennej, ktorá očakáva objekt:

Zoznam zoznam = nový ArrayList (); list.add (1); // autoboxing Integer val = 2; // autoboxing

V tomto príklade Java automaticky prevedie primitív int hodnotu obalu.

Vnútorne používa hodnota() metóda na uľahčenie premeny. Napríklad nasledujúce riadky sú ekvivalentné:

Hodnota celého čísla = 3; Celé číslo = Integer.valueOf (3);

Aj keď to uľahčuje prevod a čitateľnejšie kódy, existujú prípady, kedy nemali by sme používať autoboxing napr. vo vnútri slučky.

Podobne ako pri autoboxe, aj rozbaľovanie sa vykonáva automaticky pri prechode objektu na metódu, ktorá očakáva primitív, alebo pri jeho priradení k primitívnej premennej:

Celočíselný objekt = nové celé číslo (1); int val1 = getSquareValue (objekt); // unboxing int val2 = object; // unboxing public static int getSquareValue (int i) {return i * i; }

V podstate ak napíšeme metódu, ktorá prijíma primitívnu hodnotu alebo obalový objekt, môžeme im stále odovzdať obe hodnoty. Java sa postará o odovzdanie správneho typu napr. primitívne alebo obálky v závislosti od kontextu.

5. Záver

V tomto rýchlom výučbe sme hovorili o obálkových triedach v Jave, ako aj o mechanizme autoboxovania a rozbaľovania.


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