Enum dan semua fiturnya - 1

"Hai, Amigo!"

"Hai, Amigo!"

"Saya akan memberi tahu Anda tentang sesuatu yang sangat menarik. Ini cukup sederhana, tetapi itu membuatnya lebih menarik. Ini disebut enum. Enum adalah tipe yang menentukan kumpulan nilai spesifik yang dapat dimiliki variabel. Mari kita lihat pada contoh langsung:"

Definisi 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 mencantumkan satu set nilai dan hanya itu?"

"Ya, kami mendeklarasikan enum dan mencantumkan semua kemungkinan nilainya di dalamnya, dipisahkan dengan koma."

"Ini juga cukup mudah digunakan."

"Bisakah Anda mengaturnya ke null?"

"Ya, enum adalah kelas biasa, atau lebih tepatnya seperti kelas, mirip dengan bagaimana antarmuka seperti kelas."

"Jadi di mana pun saya bisa menggunakan kelas, bisakah saya menggunakan enum?"

"Ya."

"Bisakah saya mendeklarasikan enum di dalam kelas?"

"Ya."

"Dan mewarisi enum?"

"Tidak, kamu tidak bisa mewarisi enum dan enum tidak bisa mewarisi kelas lain."

"Mengapa demikian?"

"Karena kompiler Java mengonversi enum kira-kira seperti 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 lihat dari contoh ini:"

1) Kelas Direction benar-benar mewarisi kelas Enum, sehingga tidak dapat mewarisi apa pun.

2) Kelas Direction dinyatakan sebagai final, jadi tidak ada lagi yang dapat mewarisinya.

3) Variabel kelas Arah sebenarnya adalah variabel Arah final statis publik. Ini terbukti dalam kode yang menggunakannya:

Arah arah = Arah .LEFT ;

4) Kelas Direction hanya berisi satu konstruktor dan bersifat pribadi. Artinya, objek Direction hanya dapat dibuat menggunakan kode di dalam kelas. Selain objek yang dideklarasikan, tidak ada objek yang dapat dibuat.

5) Variabel arah dapat diberi referensi ke salah satu objek Arah yang ada. Semuanya diatur dalam enum. Tidak ada objek lain dari jenis ini, dan tidak akan ada objek lain di masa mendatang.

6) Objek arah dapat dibandingkan menggunakan «==», yang hanya akan melakukan perbandingan referensi sederhana."

"Saya tidak akan mengatakan itu sangat jelas, tetapi jauh lebih jelas setelah contoh Anda."

"Bagus. Lalu ini sedikit informasi lagi untukmu:"

1) Setiap objek Arah memiliki nomor uniknya sendiri. Yang pertama (ATAS) adalah 0, yang kedua (BAWAH) adalah 1, yang ketiga (KIRI) adalah 2, dst. Anda bisa mendapatkan angka ini menggunakan metode ordinal(). "Lihat layar:

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

2) Setiap enum memiliki metode values ​​() yang mengembalikan array nilai enum.

int leftIndex = Direction.LEFT.ordinal();

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

"Ini berarti kita bisa mendapatkan indeks elemen enum apa pun, lalu mendapatkan elemen itu lagi menggunakan indeks itu."

"Kita juga bisa menggunakan enum dalam foreach loop:"

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

"Apakah itu berarti enum menimpa metode toString? Lagi pula, itu tidak menampilkan sesuatu seperti:"
«com.codegym.Direction@123fd4»?

"Ya. Selain itu, setiap enum, dan karena itu Arah, dapat diubah menjadi sebuah String dan sebaliknya."

Konversikan ke String:
String left = Direction.LEFT.toString(); // left == "LEFT";
Mengonversi String menjadi enum:
Direction direction = Direction.valueOf("LEFT");

"Oh, mengerti."

"Apa yang terjadi jika Anda meneruskan sebuah String ke fungsi valueOf yang tidak ada di Arah? Misalnya, «AMIGO»?"

"Bagaimana menurutmu?"

"Pengecualian?"

"Ya. Pengecualian IllegalArgument."

"Nah, itu mengakhiri perkenalan kita dengan dunia enum."