2017-11-19 4 views
0

コアJavaでは、抽象クラスjava.lang.EnumはすべてのJava列挙型の基本クラスです。我々はすべて知っているように、また、表示されません頻繁に使用される方法public static <T extends Enum<T>> T valueOf(String name)、そこにある、enumのvalueOf(String name)メソッドが抽象クラスjava.lang.Enumで定義されていないのはなぜですか?

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

しかし次のようないくつかの一般的な方法があります。 Java APIのdocs-https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.htmlにはまったくありません。誰でもこれを説明できますか?

+0

まず、タイプの消去とは、そのタイプのメソッドが返すタイプを知る方法がないことを意味します。 –

+0

@OliverCharlesworthしかし、 'Enum > T valueOf(文字列名)は実際には問題なしで – Rui

+0

の形式では動作しませんが、静的メソッドに委譲する非静的なバージョンが便利です。 – karakfa

答えて

0

public static <T extends Enum<T>> T valueOf(String name)Enumにある場合、実装ではtype erasureのために返される具体的な型を知る方法がありません。したがって、各具体的なサブクラスで実装する必要があります。

実際には、これはコンパイラによって生成される「魔法」によって行われます。または、JLSには、「暗黙的に宣言されたメソッド」として記述されています。

+0

この問題のリビジョンを作成し、これがチェックされていないことが判明しました。 @オリバーCharlesworthは説明のために多くの感謝:) – Rui

関連する問題