为什么javac添加values()和valueOf(String)定义枚举类型的方法?将它们添加到Enum类本身不是更好吗?
我的意思是,如果我有一些像这样的枚举
enum FooEnum {ONE, TWO}
Run Code Online (Sandbox Code Playgroud)
javac的增加values()和valueOf(String)对FooEnum编译时.我觉得有点奇怪.这背后的原因是什么?
是否只是为了确保返回值/值的类型安全性还是还有其他什么?如果只是为了类型安全,那么Generics不会有帮助吗?
为什么javac将value()和valueOf(String)方法添加到正在定义的枚举类型中?
这使得班级自成一体.
将它们添加到Enum类本身不是更好吗?
编译器无法执行此操作,因为已经编译了Enum类,并且在任何情况下您可能都不使用相同的副本.
这可以在运行时完成,但是你增加了复杂性,例如它使得卸载类更难以获得很少的收益.
这背后的原因是什么?
没有比这更好的地方了.
注意:Enum.valueOf(clazz, name)拨打电话clazz.valueOf(name);是没有任何意义的clazz.valueOf(clazz, name);(虽然你可以,如果你想混淆人们)