【问题标题】:Why the method valueOf(String name) of enum is not defined in the abstract class java.lang.Enum?为什么抽象类java.lang.Enum中没有定义枚举的方法valueOf(String name)?
【发布时间】:2018-05-03 00:58:09
【问题描述】:

在核心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——。谁能解释一下?

【问题讨论】:

  • 好吧,首先,类型擦除意味着这样的方法无法知道要返回什么类型。
  • @OliverCharlesworth 但是Enum<T>> T valueOf(String name) 确实可以正常工作
  • 不是那种形式,而是非静态版本,委托给静态方法可能会有用。
  • 这行得通,因为它是编译器生成的魔法。

标签: java enums


【解决方案1】:

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

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

【讨论】:

  • 对这个问题做了修改,发现这个没有勾选。 @Oliver Charlesworth 非常感谢您的解释:)
猜你喜欢
  • 2016-02-13
  • 2014-10-30
  • 1970-01-01
  • 2022-06-25
  • 2011-11-16
  • 1970-01-01
  • 2011-08-31
  • 2022-01-15
  • 2011-06-16
相关资源
最近更新 更多