Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer Programmiertechnik Wrapperklassen für skalare Typen Was sind Wrapper-Klassen? ● Für jeden skalaren Typ stellt Java eine entsprechende Klasse bereit, die einen Wert des entsprechenden Typs in ein Objekt einhüllt. Wrapper-Objekt, z.B. vom Typ Float 2.7182 skalarer Wert, z.B. float Prof. Dr. Oliver Haase, HTWG Konstanz Karl Martin Kern, Seitenbau GmbH 2/9 Was sind Wrapper-Klassen? skalarer Typ Wrapper-Klasse byte Byte short Short int Integer long Long float Float double Double char Character boolean Boolean Alle Wrapper-Klassen befinden sich im Paket java.lang Prof. Dr. Oliver Haase, HTWG Konstanz Karl Martin Kern, Seitenbau GmbH 3/9 Boxing ● Skalarer Wert → Wrapper-Objekt: Konstruktoraufruf, z.B. int a = 5; Integer zahl = new Integer(a); ● Konvertierung in diese Richtung heißt auch Boxing. Prof. Dr. Oliver Haase, HTWG Konstanz Karl Martin Kern, Seitenbau GmbH 4/9 Boxing/Unboxing ● Wrapper-Objekt → Skalarer Wert : Verwendung einer Instanzmethode <xxx>Value, z.B. Integer zahl = new Integer(5); int a = zahl.intValue(); ● Konvertierung in diese Richtung heißt auch Unboxing. Prof. Dr. Oliver Haase, HTWG Konstanz Karl Martin Kern, Seitenbau GmbH 5/9 Wozu Wrapper-Klassen? ● Mit Hilfe von Wrapper-Objekten können skalare Werte dort verwendet werden, wo Objekte verlangt sind, z.B. in Containern: public class Paar { private Object l, r; public Paar(Object l, Object r) { this.l = l; this.r = r; } public Object getL() { return l; } public Object getR() { return r; } public String toString() { return "(l, r) = (" + l + ", " + r + ")"; } } Prof. Dr. Oliver Haase, HTWG Konstanz Karl Martin Kern, Seitenbau GmbH 6/9 Wozu Wrapper-Klassen? ● Verwendung skalarer Werte als Komponenten von Paar: public class Boxing { public static void main(String[] args) { Integer a = new Integer(3); Double b = new Double(5.0); Paar p = new Paar(a, b); double x = 7 + 4 * a.intValue() – b.doubleValue() / 8; } } ● ● Ohne Wrapper-Objekte könnten die Werte 3 und 5.0 nicht an den Konstruktor der Klasse Paar übergeben werden. Aber: Wrapper-Objekte erfordern explizites Boxing und Unboxing. Prof. Dr. Oliver Haase, HTWG Konstanz Karl Martin Kern, Seitenbau GmbH 7/9 Auto(un)boxing ● Seit Java 5 müssen Boxing und Unboxing nicht mehr explizit programmiert werden. ● Der Compiler erledigt das automatisch → Autoboxing/Autounboxing. ● Code wird übersichtlicher. Prof. Dr. Oliver Haase, HTWG Konstanz Karl Martin Kern, Seitenbau GmbH 8/9 Auto(un)boxing public class Boxing { public static void main(String[] args) { Integer a = 3; Double b = 5.0; Paar p = new Paar(a, b); double x = 7 + 4 * a – b / 8; } } Prof. Dr. Oliver Haase, HTWG Konstanz Karl Martin Kern, Seitenbau GmbH 9/9