以不同方式获取枚举值

时间:2016-06-06 09:23:41

标签: java enums

我最近遇到了代码更改(我不能问那个做过代码的人)。他改变了以下内容:

//String bar;
MyEnum foo = MyEnum.valueOf(bar);

要:

//String bar;
MyEnum foo = MyEnum.valueOf(MyEnum.class, bar);

它有什么不同(假设valueOf()没有覆盖MyEnum)?

1 个答案:

答案 0 :(得分:1)

第二种方法肯定是“坏的风格”#34; - 因为它在其他类上调用了Enum.class的 static 方法。含义:

MyEnum foo = Enum.valueOf(MyEnum.class, bar);

至少会更加一致。引用来自javadoc的valueOf():

请注意,对于特定的枚举类型T,可以使用该枚举上隐式声明的公共静态T valueOf(String)方法代替此方法从名称映射到相应的枚举常量。枚举类型的所有常量都可以通过调用该类型的隐式公共静态T [] values()方法来获得。

所以,长话短说;没有合理的理由用ConcreteEnum.valueOf(Class,String)替换ConcreteEnum.valueOf(String)。相反。