enum是一种map么

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 字段。