加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java Enum用条件初始化

发布时间:2020-12-15 04:46:55 所属栏目:Java 来源:网络整理
导读:在某些情况下,我想用以下值初始化我的枚举Foo. private enum Foo { BAR1("1"),BAR2("2"),BAR3("3")} 在其他一些情况下,我想要一组不同的值. private enum Foo { BAR1("x"),BAR2("y"),BAR3("z")} 然后在其他代码中,它可以使用相同的枚举进行处理.我怎样才能做
在某些情况下,我想用以下值初始化我的枚举Foo.

private enum Foo {
  BAR1("1"),BAR2("2"),BAR3("3")
}

在其他一些情况下,我想要一组不同的值.

private enum Foo {
  BAR1("x"),BAR2("y"),BAR3("z")
}

然后在其他代码中,它可以使用相同的枚举进行处理.我怎样才能做到这一点?或者还有其他更好的方法来实现我的目标吗?

解决方法

我将此作为第二个答案添加而不是更新我现有的答案,因为我认为它与人们已经投票的答案太不同了.

在类中保存选项的替代方法是在外部定义映射.如果您希望能够支持两个以上的映射,这可能是一个更好的选择.

这样做的好处是您可以定义专用于代码特定位的新映射:添加新用例时无需更改枚举的定义.

例如:

EnumMap<Foo,String> numberEnumMapping = new EnumMap<>(Foo.class);
numberEnumMapping.put(Foo.BAR1,"1");
numberEnumMapping.put(Foo.BAR2,"2");
numberEnumMapping.put(Foo.BAR3,"3");
Map<Foo,String> numberMapping = Collections.unmodifiableMap(numberEnumMapping);

EnumMap<Foo,String> letterEnumMapping = new EnumMap<>(Foo.class);
letterEnumMapping.put(Foo.BAR1,"x");
letterEnumMapping.put(Foo.BAR2,"y");
letterEnumMapping.put(Foo.BAR3,"z");
Map<Foo,String> letterMapping = Collections.unmodifiableMap(letterEnumMapping);

// ... More mappings.

(我个人会使用Guava ImmutableMap,但你可能不想使用Guava).

然后,您可以传递Map< Foo,String>到你需要执行映射的地方:

void doSomething(Foo value,Map<Foo,String> mapping) {
  System.out.println(mapping.get(value));
}

你可以定义一个界面而不是使用Map,如果你觉得它更整洁:

interface FooStrategy {
  String get(Foo value);
}

但想法是一样的:将FooStrategy传递到需要将Foo变成String的地方.

void doSomething(Foo value,FooStrategy mapping) {
  System.out.println(mapping.get(value));
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读