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)); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |