我最近遇到了代码更改(我不能问那个做过代码的人)。他改变了以下内容:
//String bar;
MyEnum foo = MyEnum.valueOf(bar);
要:
//String bar;
MyEnum foo = MyEnum.valueOf(MyEnum.class, bar);
它有什么不同(假设valueOf()
没有覆盖MyEnum
)?
答案 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)。相反。