EnumMap与Enum值

Eva*_*Eva 7 java enums

这有什么区别:

public enum Direction {
    NORTH(90),
    EAST(0),
    SOUTH(270),
    WEST(180);

    private final int degree_;

    private Direction(int degree) {
        degree_ = degree;
    }

    public int getDegree() {
        return degree_;
    }

    public static void main(String[] args) {
        System.out.println(NORTH.getDegree());
    }
}
Run Code Online (Sandbox Code Playgroud)

还有这个:

public enum Direction {
    NORTH,
    EAST,
    SOUTH,
    WEST;

    public static void main(String[] args) {
        EnumMap<Direction, int> directionToDegree = new EnumMap<Direction, int>(Direction.class);
        directionToDegree.put(NORTH, 90);
        directionToDegree.put(EAST, 0);
        directionToDegree.put(SOUTH, 270);
        directionToDegree.put(WEST, 180);

        System.out.println(directionToDegree.get(NORTH));
    }
}
Run Code Online (Sandbox Code Playgroud)

一个人更容易阅读吗?一个人更灵活吗?是否更常用?一个人跑得快吗?还有其他优点和缺点吗?

Mar*_*nik 8

EnumMap当您想要将附加数据附加到enum您不拥有的数据时,主要用例是.通常,您使用的是具有枚举的公共库,您需要使用数据注释每个成员.

作为一般规则,只要您可以使用这两种方法,请使用第一种方法.


Fra*_*eth 7

第一种情况是你有一个属性绑定到enum值(只有一个值).

第二个你有值与外部管理的枚举关联.

想象一下,现在在您的应用程序中,您想要访问这些值.如果在第二种情况下这是恒定的,那么从任何地方引用地图将会复杂得多.

当您有不同的上下文时,第二种方法会很有用.例如:NORTH在特定的上下文中NORTH应该是90,但在另一个上下文中,需要另一个与之关联的值(这里的上下文可以是特定的实现).


Pau*_*rie 6

将值添加到枚举常量本身使它们可用,而无需引用另一个对象.如果将此信息存储在地图中,则必须将引用传递给地图.如果这些是常量表示的概念的基本属性,则最好将值添加到常量本身而不是将它们存储在映射中.

使用枚举常量上的值比将它们存储在地图中要快.