Enum dan semua ciri-cirinya - 1

"Hai, Amigo!"

"Hai, Amigo!"

"Saya akan memberitahu anda tentang sesuatu yang sangat menarik. Ia agak mudah, tetapi itu menjadikannya lebih menarik. Ia dipanggil enum. Enum ialah jenis yang mentakrifkan set nilai tertentu yang boleh dimiliki oleh pembolehubah. Mari lihat pada contoh terus:"

Takrif kelas enum
public enum Direction
{
 UP,
 DOWN,
 LEFT,
 RIGHT,
}
Menggunakan enum
Direction direction = Direction.LEFT;

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

"Jadi kita hanya menyenaraikan satu set nilai dan itu sahaja?"

"Ya, kami mengisytiharkan enum dan menyenaraikan semua nilai yang mungkin di dalamnya, dipisahkan dengan koma."

"Ia juga agak mudah untuk digunakan."

"Bolehkah anda menetapkannya kepada null?"

"Ya, enum ialah kelas biasa, atau lebih tepatnya ia seperti kelas, sama seperti antara muka seperti kelas."

"Jadi di mana sahaja saya boleh menggunakan kelas, bolehkah saya menggunakan enum?"

"Ya."

"Bolehkah saya mengisytiharkan enum di dalam kelas?"

"Ya."

"Dan mewarisi enum?"

"Tidak, anda tidak boleh mewarisi enum dan enum tidak boleh mewarisi kelas lain."

"Kenapa begitu?"

"Oleh kerana pengkompil Java menukar enum kepada kira-kira ini:

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
}

"Seperti yang anda boleh lihat daripada contoh ini:"

1) Kelas Arah benar-benar mewarisi kelas Enum, jadi ia tidak boleh mewarisi apa-apa lagi.

2) Kelas Arah diisytiharkan sebagai muktamad, jadi tiada apa-apa lagi yang boleh mewarisinya.

3) Pembolehubah kelas Arah sebenarnya adalah pembolehubah Arah akhir statik awam. Ini jelas dalam kod yang menggunakannya:

Arah arah = Arah .KIRI ;

4) Kelas Arah mengandungi hanya satu pembina dan ia adalah peribadi. Ini bermakna objek Arah hanya boleh dibuat menggunakan kod di dalam kelas. Selain daripada objek yang diisytiharkan, tiada objek boleh dibuat.

5) Pembolehubah arah boleh diberikan rujukan kepada mana-mana objek Arah sedia ada. Mereka semua ditetapkan dalam enum. Tiada objek lain jenis ini dan tidak akan ada objek lain pada masa hadapan.

6) Objek arah boleh dibandingkan menggunakan «==», yang hanya akan melakukan perbandingan rujukan mudah."

"Saya tidak akan mengatakan ia sangat jelas, tetapi ia lebih jelas selepas contoh anda."

"Bagus. Kemudian, inilah sedikit lagi maklumat untuk anda:"

1) Setiap objek Arah mempunyai nombor uniknya sendiri. Yang pertama (ATAS) ialah 0, yang kedua (BAWAH) ialah 1, yang ketiga (KIRI) ialah 2, dsb. Anda boleh mendapatkan nombor ini menggunakan kaedah ordinal(). "Lihat skrin:

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

2) Setiap enum mempunyai kaedah nilai () yang mengembalikan tatasusunan nilai enum.

int leftIndex = Direction.LEFT.ordinal();

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

"Ini bermakna kita boleh mendapatkan indeks mana-mana elemen enum, dan kemudian mendapatkan elemen itu sekali lagi menggunakan indeks itu."

"Kami juga boleh menggunakan enum dalam gelung foreach :"

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

"Adakah ini bermakna bahawa enum mengatasi kaedah toString? Lagipun, ia tidak memaparkan apa-apa seperti:"
«com.codegym.Direction@123fd4»?

"Ya. Selain itu, setiap enum, dan oleh itu Arah, boleh ditukar kepada String dan sebaliknya."

Tukar kepada String:
String left = Direction.LEFT.toString(); // left == "LEFT";
Tukar String kepada enum:
Direction direction = Direction.valueOf("LEFT");

"Oh, faham."

"Apakah yang berlaku jika anda menghantar String kepada fungsi valueOf yang tidak berada dalam Arah? Contohnya, «AMIGO»?"

"Apa pendapat kamu?"

"Pengecualian?"

"Ya. Pengecualian Argumen Haram."

"Nah, itu mengakhiri pengenalan kita kepada dunia enum."