Enum at lahat ng mga tampok nito - 1

"Hi, Amigo!"

"Hi, Amigo!"

"Sasabihin ko sa iyo ang tungkol sa isang bagay na lubhang kawili-wili. Ito ay medyo simple, ngunit ginagawa itong mas kawili-wili. Ito ay tinatawag na isang enum. Ang isang enum ay isang uri na tumutukoy sa tiyak na hanay ng mga halaga na maaaring magkaroon ng isang variable. Tingnan natin sa isang halimbawa kaagad:"

Kahulugan ng isang klase ng enum
public enum Direction
{
 UP,
 DOWN,
 LEFT,
 RIGHT,
}
Gamit ang isang enum
Direction direction = Direction.LEFT;

if (direction == Direction.LEFT)
 direction = Direction.RIGHT;
else
 direction = Direction.DOWN;

"Kaya naglilista lang kami ng isang hanay ng mga halaga at iyon na?"

"Oo, nagdedeklara kami ng isang enum at naglilista ng lahat ng posibleng halaga nito sa loob, na pinaghihiwalay ng kuwit."

"Medyo madali din itong gamitin."

"Maaari mo bang itakda ito sa null?"

"Oo, ang enum ay isang regular na klase, o sa halip ito ay parang klase, katulad ng kung paano ang mga interface ay parang mga klase."

"Kaya kung saan ako maaaring gumamit ng mga klase, maaari ba akong gumamit ng enum?"

"Oo."

"Maaari ba akong magdeklara ng isang enum sa loob ng isang klase?"

"Oo."

"At magmana ng enum?"

"Hindi, hindi ka maaaring magmana ng isang enum at ang isang enum ay hindi maaaring magmana ng ibang mga klase."

"Bakit naman?"

"Dahil ang Java compiler ay nagko-convert ng mga enum sa humigit-kumulang na ito:

public final class Direction extends Enum
{
 public static final Direction UP = new Direction();
 public static final Direction DOWN = new Direction();
 public static final Direction LEFT = new Direction();
 public static final Direction RIGHT = new Direction();

 private Direction() {} // Private constructor
}

"Tulad ng nakikita mo mula sa halimbawang ito:"

1) Ang klase ng Direksyon ay ganap na nagmamana ng klase ng Enum, kaya hindi ito maaaring magmana ng anupaman.

2) Ang klase ng Direksyon ay idineklara bilang pinal, kaya wala nang iba pang maaaring magmana nito.

3) Ang mga variable ng klase ng Direksyon ay talagang mga pampublikong static na panghuling variable ng Direksyon. Ito ay makikita sa code na gumagamit ng mga ito:

Direksyon ng direksyon = Direksyon .KALIWA ;

4) Ang klase ng Direksyon ay naglalaman lamang ng isang tagabuo at ito ay pribado. Nangangahulugan iyon na ang mga object ng Direksyon ay maaari lamang gawin gamit ang code sa loob ng klase. Maliban sa ipinahayag na mga bagay, walang mga bagay na maaaring gawin.

5) Ang mga variable ng direksyon ay maaaring magtalaga ng isang reference sa alinman sa mga umiiral na object ng Direksyon. Lahat sila ay nakatakda sa loob ng enum. Walang iba pang mga bagay ng ganitong uri, at wala nang iba pa sa hinaharap.

6) Maaaring ihambing ang mga bagay sa direksyon gamit ang «==», na gagawa lamang ng isang simpleng paghahambing ng sanggunian."

"Hindi ko sasabihin na ito ay napakalinaw, ngunit ito ay mas malinaw pagkatapos ng iyong halimbawa."

"Magaling. Kung gayon narito ang kaunti pang impormasyon para sa iyo:"

1) Ang bawat object ng Direksyon ay may sariling natatanging numero. Ang una (UP) ay 0, ang pangalawa (DOWN) ay 1, ang pangatlo (LEFT) ay 2, atbp. Maaari mong makuha ang numerong ito gamit ang ordinal() na paraan. "Tingnan mo ang screen:

Direction direction = Direction.LEFT;
int index = direction.ordinal();
int index2 = Direction.RIGHT.ordinal();

2) Ang bawat enum ay may values ​​() method na nagbabalik ng array ng mga value ng enum.

int leftIndex = Direction.LEFT.ordinal();

Direction[] array = Direction.values();
Direction left = array[leftIndex];

"Ito ay nangangahulugan na maaari nating makuha ang index ng anumang elemento ng enum, at pagkatapos ay makuha muli ang elemento gamit ang index na iyon."

"Maaari rin kaming gumamit ng enum sa isang foreach loop:"

for (Direction direction : Direction.values())
{
 System.out.println(direction);
}
Output ng screen:
UP
DOWN
LEFT
RIGHT

"Nangangahulugan ba iyon na na-override ng enum ang toString method? Pagkatapos ng lahat, hindi ito nagpapakita ng anumang bagay tulad ng:"
«com.codegym.Direction@123fd4»?

"Oo. Bukod dito, ang bawat enum, at samakatuwid ang Direksyon, ay maaaring ma-convert sa isang String at kabaliktaran."

I-convert sa isang String:
String left = Direction.LEFT.toString(); // left == "LEFT";
I-convert ang isang String sa isang enum:
Direction direction = Direction.valueOf("LEFT");

"Oh, nakuha ko."

"Ano ang mangyayari kung magpasa ka ng String sa valueOf function na wala sa Direksyon? Halimbawa, «AMIGO»?"

"Ano sa tingin mo?"

"Isang exception?"

"Yep. Isang IllegalArgumentException."

"Well, iyan ay bumabalot sa ating pagpapakilala sa mundo ng mga enum."