1

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

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

我现在希望能够拥有某种 Map ,我可以在其中扩展 SomeEnum 以创建项目特定的一组值,然后在 Map 中使用它。这是为了强制开发人员只使用预定义变量中的密钥——这就是我没有使用的原因Map<String, String>

我知道枚举无法扩展,因此任何其他解决方案也将不胜感激。

据我所知,另一种选择 - 如果这是不可能的 - 是有一个Map<String, String>,然后在地图中的字符串上包含某种项目特定的验证,以确保它是某个枚举的一部分(即一些预定义的变量放)。

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

4

2 回答 2

2

SomeEnum创建一个作为构造函数参数的包装类。将其保存到现场并渲染final。然后,使用这个 Wrapper 作为Map key。类似的功能可以通过继承来实现,但是 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);
    }
}
于 2013-06-17T10:53:36.097 回答
1

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

于 2013-06-17T10:49:43.220 回答