Java ist auch eine Insel

Montag, Juli 23, 2007

sun.misc.Unsafe zur Objekterzeugung ohne Standard-Konstruktor

Inselupdate: Die Laufzeitumgebung von Sun liefert noch über 3000 Klassendateien in den Paketen sun und sunw aus. Diese internen Klassen sind nicht offiziell dokumentiert[1], aber zum Teil sehr leistungsfähig und erlauben selbst direkten Speicherzugriff oder können Objekte ohne Standard-Konstruktor erzeugen:

com/tutego/insel/sun/UnsafeInstance.java, Ausschnitt

Field field = sun.misc.Unsafe.class.getDeclaredField( "theUnsafe" );

field.setAccessible( true );

sun.misc.Unsafe unsafe = (sun.misc.Unsafe) field.get( null );

File f = (File) unsafe.allocateInstance( File.class );

System.out.println( f.getPath() ); // null


File hat keinen Standard-Konstruktor, noch nicht einmal einen privaten. Diese Art der Objekterzeugung kann bei der Deserialisierung (siehe dazu Kapitel 13) hilfreich sein.




[1] Das Buch “Java Secrets“ von Elliotte Rusty Harold geht den Klassen nach, ist aber schon älter.

AddThis Social Bookmark Button