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ます (1 つの値のみ)。

2 番目の値は、外部で管理されている列挙型に関連付けられています。

アプリケーションでこの値にアクセスしたいと想像してみてください。これが 2 番目のケースで一定である場合、どこからでもマップを参照するのははるかに複雑になります。

2 番目のアプローチは、異なるコンテキストがある場合に役立ちます。たとえばNORTH、特定のコンテキストNORTHでは 90 にする必要がありますが、別のコンテキストではそれに関連付けられた別の値が必要になります (ここでのコンテキストは特定の実装である可能性があります)。

于 2012-06-30T15:34:36.463 に答える
6

enum 定数自体に値を追加すると、別のオブジェクトへの参照なしで使用できるようになります。この情報をマップに保存する場合は、マップへの参照を渡す必要があります。これらが定数が表す概念の基本的なプロパティである場合は、値をマップに格納するのではなく、定数自体に値を追加することをお勧めします。

列挙型定数で値を使用すると、それらをマップに格納するよりも高速になります。

于 2012-06-30T15:31:51.310 に答える