EnumMap与Enum值

时间:2012-06-30 15:28:09

标签: 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());
    }
}

和此:

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));
    }
}

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

3 个答案:

答案 0 :(得分:8)

EnumMap的主要用例是,您希望将其他数据附加到您不拥有的enum。通常,您使用的是具有枚举的公共库,您需要使用您的数据注释每个成员。

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

答案 1 :(得分:7)

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

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

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

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

答案 2 :(得分:6)

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

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