“嗨,阿米戈!”
“嗨,阿米戈!”
“我要告诉你一些非常有趣的事情。它很简单,但这使它更有趣。它称为枚举。枚举是一种定义变量可以具有的特定值集的类型。让我们看一下举个例子:“
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