2016-05-01 3 views
0

Ich versuche immer noch, effizient auf Klassen zu wechseln, und ich frage mich, ob das funktionieren könnte: Generiere den gleichen Code wie ein vom Compiler generierter "String einschalten" -Code, aber benutze intern statt gleich.Sind alle Klassennamen garantiert in allen JVM interniert?

zu: Why can't we switch on classes in Java 7+?

+0

Um einen Klassennamen in einem Schalter zu verwenden, müssten Sie ein Zeichenfolgenliteral verwenden, also würden diese im String-Konstantenpool sein. Selbst wenn Klassennamen nicht automatisch interniert werden, sind sie das Ergebnis Ihrer Umstellung. –

+0

Klingt wie ein XY-Problem. Warum? – chrylis

+0

@AndyTurner nicht unbedingt, siehe http://Stackoverflow.com/a/31671438/693752 – Snicolas

Antwort

4

vermute ich, Sie in Schwierigkeiten mit dieser Art von Ansatz zu bekommen. Die einfache Antwort ist, dass die JVM standardmäßig alle Strings trainiert. Ihr Problem ist jedoch viel tiefer - der Name einer Klasse ist innerhalb einer einzelnen JVM nicht eindeutig. Wenn die gleiche Klasse von zwei verschiedenen Klassenladern geladen wird, dann gibt es zwei Instanzen dieses Klassenobjekts in der JVM, die denselben Namen haben, die aber nicht sind. Wenn Sie die Semantik des Einschaltens einer Klasse modellieren möchten, benötigen Sie eine Möglichkeit, dieses Verhalten zu erfassen.

+3

Ah, ja, das alte 'kann javax.servlet.http.HttpServletRequest nicht auf javax.servlet.http.HttpServletRequest' ... – chrylis

+0

Guter Punkt. Ich denke, es bedeutet, dass: http://StackOverflow.com/A/31671438/693752 ist der beste Ansatz dann. Der letzte Test kann sich nicht nur auf Strings verlassen. – Snicolas

+0

Ich lasse die Frage jedoch offen, da ich eine Antwort für meine aktuelle Forschungsarbeit bekommen habe, aber die Frage hat einen breiteren Rahmen. – Snicolas

Verwandte Themen