public enum Direction {
UP(KeyEvent.VK_UP), DOWN(KeyEvent.VK_DOWN), LEFT(KeyEvent.VK_LEFT), RIGHT(KeyEvent.VK_RIGHT);
public final int vk;
// constructor
Direction(int vk) {
this.vk = vk;
}
// Direction : type
// fromVK : name
public static Direction fromVK(int vk) {
for (Direction d : values()) {
if (d.vk == vk) {
return d;
}
}
return null;
}
}
这里面为什么可以用values()呀?还有就是这里的enum是每一个都有自己的数字序列么,所以Direction(int vk)的参数可以是int
values() 是 Java 语言提供给枚举类型的一个方法,它会返回一个包含枚举所有值的数组,按它们声明的顺序排列。在这种情况下,它用于遍历 Direction 枚举的所有可能值,以检查给定的 int vk 是否与任何枚举实例的 vk 字段匹配。
是的,每个枚举实例都有自己的唯一序数值,从第一个实例的 0 开始,并且实例按照它们声明的顺序创建。这就是为什么构造函数 Direction(int vk) 可以接受 int 参数并将其分配给枚举实例的 vk 字段。