Eins, zwei, drei, vier Eckstein...

JEP 371: Hidden Classes – Versteckte Klassen in Java

Dominik Mohilo

© Software & Support Media GmbH / Bianca Röder

Das Java-Jahr startet mit einem neuen Java Enhancement Proposal (JEP). Mit JEP 371 wird die Einführung „versteckter Klassen“ vorgeschlagen, die die Arbeit mit Frameworks verbessern sollen. In einer der kommenden Versionen der Programmiersprache könnten so dynamisch erstellte Klassen stellenweise durch versteckte Klassen ersetzt werden.

Java-Entwickler, die mit Frameworks arbeiten, kennen das: Manche Klassen, die zur Laufzeit dynamisch erstellt werden, sind deutlich sichtbarer oder langlebiger, als es eigentlich nötig ist. Das liegt daran, dass die APIs zum Erstellen von Klassen, ClassLoader::defineClass und Lookup::defineClass, keinen Unterschied dabei machen, ob der Bytecode der Klasse zur Laufzeit dynamisch oder statisch beim Kompilieren erstellt wurde. Da die Klasse per se als „sichtbar“ definiert ist, wird sie entsprechend auch genutzt.

Gut für Java- und JavaScript-Nutzer

Gäbe es nun „versteckte“ Klassen, könnten einige Use Cases abgedeckt werden, die nicht so einfach von anderen Klassen aufgerufen werden können. Im JEP 371 werden einige solcher möglichen Einsatzgebiete beispielhaft genannt. So könnte etwa java.lang.reflect.Proxy versteckte Klassen definieren, die als Proxy-Klassen agieren. Diese würden – wie der Name bereits sagt – Proxy-Schnittstellen implementieren. Auch in Verbindung mit java.lang.invoke-StringConcatFactory könnte man versteckte Klassen einsetzen, etwa um die Methoden für die konstanten Verkettungen zu beinhalten. Für die Zusammenarbeit mit JavaScript in Java könnte eine entsprechende Engine versteckte Klassen erstellen, die den Bytecode enthalten, der aus JavaScript-Anwendungen übersetzt wurde.

Einher mit der neuen Funktionalität geht allerdings auch das Bestreben, die Sprache selbst nicht zu ändern. Zudem ist es definitiv nicht das Ziel des Proposals, die gesamte Funktionalität von sun.misc.Unsafe::defineAnonymousClass zu unterstützen. Für das API könnte sich dies, im Gegenteil, als fatal erweisen: Mandy Chung schlägt nämlich vor, es als „deprecated“ zu markieren und in einem der nächsten Java-Updates auszubauen.

Weitere Informationen zum JEP 371 und Details über die Funktionsweise der versteckten Klassen gibt es in der Beschreibung des JEPs.

Verwandte Themen:

Geschrieben von
Dominik Mohilo
Dominik Mohilo
Dominik Mohilo studierte Germanistik und Soziologie an der Goethe-Universität in Frankfurt. Seit 2015 ist er Redakteur bei S&S-Media.
Kommentare

Hinterlasse einen Kommentar

avatar
4000
  Subscribe  
Benachrichtige mich zu: