首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Java中用类替换枚举构造仍然有意义吗?

在Java中用类替换枚举构造仍然有意义吗?
EN

Stack Overflow用户
提问于 2013-05-23 22:15:12
回答 3查看 2.1K关注 0票数 10

我正在阅读Joshua Bloch在2008年发表的Effective,其中一个技巧是用类替换枚举结构。下面是书中显示的示例。

代码语言:javascript
运行
复制
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枚举类型示例。

代码语言:javascript
运行
复制
public enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
    THURSDAY, FRIDAY, SATURDAY 
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-23 22:18:12

早在将enum引入该语言之前,"Effective“这本书就已经写好了,所以我建议您使用enum特性。幸运的是,Joshua是非常通用的,所以您可以使用enum特性非常仔细地遵循enum的建议:

代码语言:javascript
运行
复制
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;
    }
}
票数 11
EN

Stack Overflow用户

发布于 2013-05-23 22:20:30

我认为这个想法是完全相反的。如果您有类似枚举结构-请使用enum

您的类示例并不完全适合您编写的枚举。首先,它不能被编译,因为它包含几个名为CLUBS的字段。其次,枚举包含您的类中未提及的日期。

票数 2
EN

Stack Overflow用户

发布于 2013-05-23 22:39:58

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16716304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档