ClassLoad ein Enum-Typ

8

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.

    
SnakeDoc 20.01.2015, 20:05
quelle

2 Antworten

4

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.

Bearbeiten:

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%     
RealSkeptic 20.01.2015, 21:20
quelle
0

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.

    
gknicker 20.01.2015 20:48
quelle

Tags und Links