首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么枚举的构造函数不能访问静态字段?

为什么枚举的构造函数不能访问静态字段?
EN

Stack Overflow用户
提问于 2009-01-14 17:45:31
回答 3查看 45K关注 0票数 120

为什么枚举的构造函数不能访问静态字段和方法?这在类中是完全有效的,但在枚举中是不允许的。

我要做的是将我的枚举实例存储在一个静态映射中。考虑下面的示例代码,它允许通过缩写进行查找:

代码语言:javascript
运行
复制
public enum Day {
    Sunday("Sun"), Monday("Mon"), Tuesday("Tue"), Wednesday("Wed"), Thursday("Thu"), Friday("Fri"), Saturday("Sat");

    private final String abbreviation;

    private static final Map<String, Day> ABBREV_MAP = new HashMap<String, Day>();

    private Day(String abbreviation) {
        this.abbreviation = abbreviation;
        ABBREV_MAP.put(abbreviation, this);  // Not valid
    }

    public String getAbbreviation() {
        return abbreviation;
    }

    public static Day getByAbbreviation(String abbreviation) {
        return ABBREV_MAP.get(abbreviation);
    }
}

这将不起作用,因为枚举不允许在其构造函数中使用静态引用。但是,如果以类的形式实现,它就能正常工作:

代码语言:javascript
运行
复制
public static final Day SUNDAY = new Day("Sunday", "Sun");
private Day(String name, String abbreviation) {
    this.name = name;
    this.abbreviation = abbreviation;
    ABBREV_MAP.put(abbreviation, this);  // Valid
}
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/443980

复制
相关文章

相似问题

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