Enum และคุณสมบัติทั้งหมด - 1

“สวัสดี อามีโก้!”

“สวัสดี อามีโก้!”

"ฉันจะบอกคุณเกี่ยวกับสิ่งที่น่าสนใจมาก มันค่อนข้างเรียบง่าย แต่นั่นทำให้มันน่าสนใจยิ่งขึ้น มันเรียกว่า enum enum เป็นประเภทที่กำหนดชุดของค่าเฉพาะที่ตัวแปรสามารถมีได้ ลองดูสิ ที่ตัวอย่างทันที:"

คำจำกัดความของคลาส enum
public enum Direction
{
 UP,
 DOWN,
 LEFT,
 RIGHT,
}
ใช้ enum
Direction direction = Direction.LEFT;

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

"เราแค่เขียนรายการค่าชุดหนึ่งแล้วใช่ไหม"

"ใช่ เราประกาศ enum และระบุค่าที่เป็นไปได้ทั้งหมดภายในนั้น โดยคั่นด้วยเครื่องหมายจุลภาค"

"มันค่อนข้างใช้งานง่ายด้วย"

"คุณตั้งค่าเป็นโมฆะได้ไหม"

"ใช่ enum เป็นคลาสปกติ หรือค่อนข้างจะเหมือนกับคลาส คล้ายกับอินเทอร์เฟซที่เหมือนกับคลาส"

"ดังนั้นทุกที่ที่ฉันสามารถใช้ชั้นเรียนได้ ฉันสามารถใช้ enum ได้หรือไม่"

"ใช่."

"ฉันสามารถประกาศ enum ในชั้นเรียนได้หรือไม่"

"ใช่."

"และสืบทอด enum?"

"ไม่ได้ คุณไม่สามารถสืบทอด enum และ enum ไม่สามารถสืบทอดคลาสอื่นได้"

"ทำไมล่ะ?"

"เนื่องจากคอมไพเลอร์ Java แปลง enums เป็นประมาณนี้:

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
}

"อย่างที่คุณเห็นจากตัวอย่างนี้:"

1)คลาส Direction สืบทอดคลาส Enum อย่างสมบูรณ์ ดังนั้นจึงไม่สามารถสืบทอดสิ่งอื่นใดได้

2)คลาส Direction ถูกประกาศเป็นขั้นสุดท้าย ดังนั้นจึงไม่มีสิ่งอื่นใดที่สามารถสืบทอดได้

3)ตัวแปรของคลาส Direction เป็นตัวแปรทิศทางสุดท้ายแบบคงที่สาธารณะ เห็นได้ชัดในรหัสที่ใช้:

ทิศทางทิศทาง =ทิศทาง .LEFT ;

4)คลาส Direction มีตัวสร้างเพียงตัวเดียวและเป็นส่วนตัว นั่นหมายความว่า Direction object สามารถสร้างได้โดยใช้โค้ดภายในคลาสเท่านั้น นอกเหนือจากวัตถุที่ประกาศแล้ว จะไม่มีการสร้างวัตถุใดๆ

5)ตัวแปรทิศทางสามารถกำหนดการอ้างอิงให้กับวัตถุทิศทางที่มีอยู่ พวกเขาทั้งหมดตั้งอยู่ใน enum ไม่มีวัตถุประเภทนี้อีกแล้ว และจะไม่มีอย่างอื่นอีกในอนาคต

6)วัตถุทิศทางสามารถเปรียบเทียบได้โดยใช้ «==» ซึ่งจะทำการเปรียบเทียบการอ้างอิงอย่างง่าย"

"ฉันจะไม่บอกว่ามันชัดเจนมาก แต่มันชัดเจนขึ้นมากหลังจากตัวอย่างของคุณ"

"เยี่ยมมาก ต่อไปนี้เป็นข้อมูลเพิ่มเติมสำหรับคุณ:"

1)แต่ละวัตถุทิศทางมีหมายเลขเฉพาะของตนเอง ตัวแรก (ขึ้น) คือ 0 ตัวที่สอง (ลง) คือ 1 ตัวที่สาม (ซ้าย) คือ 2 เป็นต้น คุณสามารถรับตัวเลขนี้โดยใช้เมธอด ordinal() "ดูที่หน้าจอ:

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

2)แต่ละ enum มีค่า () วิธีการที่คืนค่าอาร์เรย์ของค่า enum

int leftIndex = Direction.LEFT.ordinal();

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

"นั่นหมายความว่าเราสามารถรับดัชนีขององค์ประกอบ enum ใด ๆ แล้วรับองค์ประกอบอีกครั้งโดยใช้ดัชนีนั้น"

"เรายังสามารถใช้ enum ในforeachลูป:"

for (Direction direction : Direction.values())
{
 System.out.println(direction);
}
เอาต์พุตหน้าจอ:
UP
DOWN
LEFT
RIGHT

"นั่นหมายความว่า enum แทนที่เมธอด toString หรือไม่ ท้ายที่สุด มันไม่แสดงผลเช่น:"
«com.codegym.Direction@123fd4»?

"ใช่ ยิ่งกว่านั้น แต่ละ enum และ Direction สามารถแปลงเป็นสตริงได้ และในทางกลับกัน"

แปลงเป็นสตริง:
String left = Direction.LEFT.toString(); // left == "LEFT";
แปลงสตริงเป็น enum:
Direction direction = Direction.valueOf("LEFT");

"อ๋อ เข้าใจแล้ว"

"จะเกิดอะไรขึ้นถ้าคุณส่งสตริงไปยังฟังก์ชัน valueOf ที่ไม่ได้อยู่ในทิศทาง ตัวอย่างเช่น «AMIGO»"

"คุณคิดอย่างไร?"

"ข้อยกเว้น?"

"ใช่ ข้อยกเว้นอาร์กิวเมนต์ที่ผิดกฎหมาย"

"เอาล่ะ นั่นเป็นการสรุปการแนะนำของเราสู่โลกของ enums"