Wie würde man einen Enum-Typ über einen ClassLoader oder einen ähnlichen Mechanismus instanziieren? (Ich versuche, alles unter dem gleichen Kontext Classloader für eine eigenständige Server-Anwendung zu halten).
Ich habe etwas wie:
%Vor%Ich hatte fälschlicherweise gedacht, einfach das Laden der Enum wäre genug, um es zu starten (es ist privater Konstruktor enthält Startmethode Aufrufe und was nicht).
Das, was ich oben habe, führt zu keinen Ausnahmen, aber die JVM endet einfach nach der letzten Zeile und der Server startet nicht.
Offensichtlich tun:
%Vor%Ergebnisse, bei denen eine Ausnahme ausgelöst wird.
Um meinen Kommentar zu erweitern, denke ich, dass das sauberste, was du bekommst, etwa so ist:
%Vor% Es gibt wirklich keine Möglichkeit, den ungeprüften Cast von Class<?>
auf einen korrekten Enum-Typ zu vermeiden. Aber zumindest der @SuppressWarnings
ist im Umfang begrenzt.
Bei der weiteren Überprüfung gibt es tatsächlich einen einfacheren Weg, um das zu erreichen, was Sie brauchen, ohne den Namen einer Instanz und ohne Warnungen kennen zu müssen:
%Vor% Das Laden einer Enumeration verursacht keine Initialisierung. Sie müssen es entweder über eine Feldreferenz oder eine Methodenreferenz referenzieren. Also würde sogar eine einfache Aussage wie Name name = Name.SERVER;
oder Name.SERVER.name();
den Trick machen.
Siehe Abschnitt 5.5 Initialisierung in Kapitel < a href="http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-5.html"> 5. Laden, Verknüpfen und Initialisieren der Java Virtual Machine-Spezifikation.
Tags und Links java enums classloader