栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java:无法在枚举内使用EnumSet:初始化错误:Tech Research人才树示例

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java:无法在枚举内使用EnumSet:初始化错误:Tech Research人才树示例

您的声明结构非常聪明,这很遗憾,无法正常工作。但是

EnumSet
显然需要先对枚举进行完全初始化。它尝试从枚举中获取常量数组,以便除其他外,它知道其内部位集需要多少空间。

这是一种解决方法。它使用一个助手方法,该方法首先创建一个普通的set(

HashSet
),然后在静态初始化块中迭代枚举常量,并用
EnumSet
s
替换所有这些set 。

public enum BuildingTechTree {    // Named constants    //NameSoftName  Requirements    NONE  ("NULL",  null),    BARRACKS         ("Barracks",         setOf(NONE)),    WALLS_SANDBAGS   ("Sandbag wall",     setOf(NONE)),    POWERPLANT       ("Power plant",      setOf(BARRACKS)),    GUARDTOWER       ("Guard Tower",      setOf(BARRACKS));    private final String softName;    private Set<BuildingTechTree> requirements;    private BuildingTechTree(String softName, Set<BuildingTechTree> requirements) {        this.softName = softName;        this.requirements = requirements;    }    private static Set<BuildingTechTree> setOf(BuildingTechTree... values) {        return new HashSet<>(Arrays.asList(values));    }    static {        for (BuildingTechTree v : values()) { if (v.requirements == null) {     v.requirements = EnumSet.noneOf(BuildingTechTree.class); } else {     v.requirements = EnumSet.copyOf(v.requirements); }        }    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/573997.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号