创建具有可扩展键值的地图

时间:2013-06-17 10:46:35

标签: java map

我想创建一个具有可扩展键值的地图。

目前我有一个共同的项目有一些枚举。 在我将公共项目作为依赖项包含在我的主项目中,我有一个使用枚举作为键的映射:Map<SomeEnum, String>

我现在希望能够使用某种Map来扩展SomeEnum以创建项目特定的值集,然后在Map中使用它。 这是为了迫使开发人员仅使用预定义变量中的密钥 - 这就是我没有使用Map<String, String>

的原因

我知道枚举不能扩展,所以任何其他解决方案也会受到赞赏。

据我所知,替代方案 - 如果不可能 - 是拥有Map<String, String>,但是在地图中的字符串上包含某种项目特定的验证,以确保它是一部分一些枚举(即一些预定义的变量集)。

感谢阅读。我希望这是有道理的。 期待回复。

2 个答案:

答案 0 :(得分:2)

创建一个以SomeEnum作为构造函数参数的包装类。将其保存到该字段并将其呈现为final。然后,将此包装器用作Map 。使用继承可以实现类似的功能,但Joshua Bloch的 Effective Java 建议我们更喜欢组合而非继承

只需确保实施hashCodeequals方法即可与此枚举进行比较。

public class EnumWrapper<T extends SomeEnum> {

    private final T fEnum;

    public EnumWrapper<T>(SomeEnum enum) {
       fEnum= enum;
    }

    @Override
    public int hashCode() {
        return fEnum.hashCode();
    }

    @Override boolean equals(Object o) {
        if (!(o instanceof EnumWrapper))
            return false;

        EnumWrapper other= (EnumWrapper) o;
        return this.fEnum.equals(o.fEnum);
    }
}

答案 1 :(得分:1)

Map<YourInterface,String>是解决方案。制作enum工具YourInterface