为什么enum的方法valueOf(String name)没有在抽象类java.lang.Enum中定义?

时间:2017-11-19 19:51:33

标签: java enums

在核心Java中,抽象类java.lang.Enum是所有Java枚举类型的基类。有一些常见的方法,如:

  • public final String name()
  • public final int ordinal()
  • public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)

但是,众所周知,还有一种经常使用的方法public static <T extends Enum<T>> T valueOf(String name),它根本没有出现在Java API文档中 - https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html。任何人都可以解释一下吗?

1 个答案:

答案 0 :(得分:0)

如果在public static <T extends Enum<T>> T valueOf(String name)上有这样的方法Enum,由于type erasure,实现将无法知道要返回的具体类型。所以它必须在每个具体的子类上实现。

实际上,这是通过编译器生成的“魔术”来完成的。或者正如JLS所说,作为“隐式声明的方法”。