10

我正在阅读 2008 年出版的 Joshua Bloch 编写的 Effective Java,其中一个技巧是用类替换枚举结构。这是书中显示的示例。

public class Suit {
    private final String name;
    public Suit(String name) { this.name = name; }
    public String toString() { return name; }
    public static final Suit CLUBS = new Suit("clubs");
    public static final Suit DIAMONDS = new Suit("diamonds");
    public static final Suit HEARTS = new Suit("hearts");
    public static final Suit SPADES = new Suit("spades");
}

我的问题是,既然 Java 现在支持枚举类型,那么使用上面的方法仍然是一个好主意吗?这是 Java 枚举类型的示例。

public enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
    THURSDAY, FRIDAY, SATURDAY 
}
4

3 回答 3

11

“Effective Java”一书在 s 引入语言之前就已经写好enum了,所以我建议改用这个enum特性。幸运的是,Java的用途非常广泛,因此您可以使用该功能enum非常接近 Joshua 的建议:enum

public enum Day {
    SUNDAY("Sunday", 0)
,   MONDAY("Monday", 1)
,   TUESDAY("Tuesday", 2)
,   WEDNESDAY("Wednesday", 3)
,   THURSDAY("Thursday", 4)
,   FRIDAY("Friday", 5)
,   SATURDAY("Saturday", 6);

    private String name;
    private int ordinal;
    public String getName() { return name; }
    public int getOrdinal() { return ordinal; }
    public Day(String name, int ordinal) {
        this.name = name;
        this.ordinal = ordinal;
    }
}
于 2013-05-23T14:18:12.320 回答
2

我认为这个想法正好相反。如果你有类似枚举的结构 - 使用enum.

您的班级示例并不完全适合您编写的枚举。首先,它无法编译,因为它包含多个名为CLUBS. 其次,枚举包含课堂上未提及的日期。

于 2013-05-23T14:20:30.470 回答
0

据我所知,java 将 enum-s 编译为public static final对象。javap您可以通过使用( http://docs.oracle.com/javase/1.5.0/docs/tooldocs/windows/javap.html )查看枚举 .class 文件来检查这一点。

于 2013-05-23T14:39:57.983 回答