我想创建一个具有可扩展键值的地图。
目前我有一个共同的项目有一些枚举。
在我将公共项目作为依赖项包含在我的主项目中,我有一个使用枚举作为键的映射:Map<SomeEnum, String>
我现在希望能够使用某种Map来扩展SomeEnum以创建项目特定的值集,然后在Map中使用它。
这是为了迫使开发人员仅使用预定义变量中的密钥 - 这就是我没有使用Map<String, String>
我知道枚举不能扩展,所以任何其他解决方案也会受到赞赏。
据我所知,替代方案 - 如果不可能 - 是拥有Map<String, String>
,但是在地图中的字符串上包含某种项目特定的验证,以确保它是一部分一些枚举(即一些预定义的变量集)。
感谢阅读。我希望这是有道理的。 期待回复。
答案 0 :(得分:2)
创建一个以SomeEnum
作为构造函数参数的包装类。将其保存到该字段并将其呈现为final
。然后,将此包装器用作Map
键。使用继承可以实现类似的功能,但Joshua Bloch的 Effective Java 建议我们更喜欢组合而非继承
只需确保实施hashCode
和equals
方法即可与此枚举进行比较。
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
。