7

这有什么区别:

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

更容易阅读吗?一种更灵活吗?一个更传统地使用吗?一个人跑得更快吗?还有其他优点和缺点吗?

4

3 回答 3

9

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

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

于 2012-06-30T16:18:55.580 回答
8

在第一种情况下,您有一个绑定到该enum值的属性(只有一个值)。

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

想象一下,现在在您的应用程序中,您想要访问这些值。如果这在第二种情况下保持不变,那么从任何地方引用地图都会变得更加复杂。

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

于 2012-06-30T15:34:36.463 回答
6

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

在枚举常量上使用值将比将它们存储在映射中更快。

于 2012-06-30T15:31:51.310 回答