“嗨,阿米戈!”
“嗨,阿米戈!”
“我要告訴你一些非常有趣的事情。它很簡單,但這使它更有趣。它稱為枚舉。枚舉是一種定義變量可以具有的特定值集的類型。讓我們看一下舉個例子:“
public enum Direction
{
UP,
DOWN,
LEFT,
RIGHT,
}
Direction direction = Direction.LEFT;
if (direction == Direction.LEFT)
direction = Direction.RIGHT;
else
direction = Direction.DOWN;
“所以我們只列出一組值,僅此而已?”
“是的,我們聲明一個枚舉並在裡面列出它所有可能的值,用逗號分隔。”
“它也很容易使用。”
“你能把它設為空嗎?”
“是的,枚舉是一個常規類,或者更確切地說,它有點像類,類似於接口與類的相似之處。”
“所以無論我在哪裡可以使用類,我都可以使用枚舉嗎?”
“是的。”
“我可以在類中聲明一個枚舉嗎?”
“是的。”
“然後繼承一個枚舉?”
“不,你不能繼承一個枚舉,一個枚舉也不能繼承其他類。”
“這是為什麼?”
“因為 Java 編譯器將枚舉轉換為大致如下:
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 類被聲明為final,所以沒有其他東西可以繼承它。
3) Direction類的變量實際上是public static final Direction變量。這在使用它們的代碼中很明顯:
方向direction = Direction .LEFT ;
4) Direction 類只有一個構造函數並且是私有的。這意味著只能使用類內部的代碼創建 Direction 對象。除了聲明的對象之外,不能創建任何對象。
5)可以為方向變量分配對任何現有方向對象的引用。它們都在枚舉中設置。沒有其他這種類型的對象,將來也不會有任何其他對象。
6)方向對象可以使用 «==» 進行比較,這只會執行一個簡單的引用比較。”
“我不會說它非常清楚,但在你的例子之後它會更清楚。”
“太好了。那麼這裡有一些更多的信息給你:”
1)每個 Direction 對像都有自己唯一的編號。第一個 (UP) 為 0,第二個 (DOWN) 為 1,第三個 (LEFT) 為 2,等等。您可以使用 ordinal() 方法獲取此數字。“看屏幕:
Direction direction = Direction.LEFT;
int index = direction.ordinal();
int index2 = Direction.RIGHT.ordinal();
2)每個枚舉都有一個返回枚舉值數組的values () 方法。
int leftIndex = Direction.LEFT.ordinal();
Direction[] array = Direction.values();
Direction left = array[leftIndex];
“這意味著我們可以獲得任何枚舉元素的索引,然後使用該索引再次獲取該元素。”
“我們還可以在foreach循環中使用枚舉:”
for (Direction direction : Direction.values())
{
System.out.println(direction);
}
UP
DOWN
LEFT
RIGHT
“這是否意味著枚舉覆蓋了 toString 方法?畢竟,它不會顯示類似:”
«com.codegym.Direction@123fd4» 的內容?
“是的。此外,每個枚舉和方向都可以轉換為字符串,反之亦然。”
String left = Direction.LEFT.toString(); // left == "LEFT";
Direction direction = Direction.valueOf("LEFT");
“哦,知道了。”
“如果你將一個字符串傳遞給不在 Direction 中的 valueOf 函數會發生什麼?例如,«AMIGO»?”
“你怎麼認為?”
“例外?”
“是的。一個 IllegalArgumentException。”
“嗯,我們對枚舉世界的介紹到此結束。”
GO TO FULL VERSION