2017-11-19 1 views
0

Im Kern Java ist die abstrakte Klasse java.lang.Enum die Basisklasse aller Java-Aufzählungstypen. Es gibt einige allgemeine Methoden wie:Warum ist die Methode valueOf (String name) von enum in der abstrakten Klasse java.lang.Enum nicht definiert?

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

Doch wie wir alle wissen, gibt es auch eine häufig verwendete Methode public static <T extends Enum<T>> T valueOf(String name), die nicht angezeigt wird in den Java-API-Dokumenten - https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html - überhaupt. Jeder kann das erklären?

+0

Nun, für einen Anfang, Typ schreiben bedeutet, dass eine solche Methode keine Möglichkeit hätte zu wissen, welcher Typ zurückgeben. –

+0

@OliverCharlesworth Aber die'Enum > T valueOf (String-Name) 'kann in der Tat ohne Problem – Rui

+0

nicht in dieser Form arbeiten, aber eine nicht-statische Version, Delegieren an die statische Methode könnte nützlich sein. – karakfa

Antwort

0

Wenn es eine solche Methode public static <T extends Enum<T>> T valueOf(String name) unter Enum gäbe, hätte die Implementierung aufgrund von type erasure keine Möglichkeit, den konkreten zurückzugebenden Typ zu kennen. Also muss es auf jeder konkreten Unterklasse implementiert werden.

In der Praxis geschieht dies über Compiler-generierte "Magie". Oder wie die JLS es ausdrückt, als "implizit deklarierte Methode".

+0

Eine Revision zu diesem Problem erstellt und festgestellt, dass dies nicht aktiviert ist. @ Oliver Charlesworth vielen Dank für die Erklärung :) – Rui

Verwandte Themen