» Tutorial / Java Bibliotheken / Wrapper

Oft kommt man in die Situation, einen primitiven Datentyp als vollwertiges Objekt nutzen zu müssen. Dafür stellt die Java - Bibliothek für alle elementaren Typen jeweils eine Wrapper - Klasse bereit, die den Wert intern kapselt und als Objekt repräsentiert. Diese Klassen sind Gegenstand dieses Kapitels.


» verfügbare Klassen nach oben «

Java stellt für die folgenden primitiven Datentypen die entsprechenden Wrapper - Klassen zur Verfüung. Diese können elementare Werte als Objekt kapseln.

Datentyp
 
byte
boolean
char
double
float
int
long
short
void

» Instanziierung nach oben «

Die Wrapper - Klassen erlauben alle die Instanziierung eines neuen Objekts entweder durch Übergabe eines entsprechenden Wertes oder eines Strings, dessen Inhalt dann automatisch in den entsprechenden Datentyp konvertiert wird.

Hier eine Übersicht über die zur Verfügung stehenden Konstruktoren.

Werte Strings
  
public   Boolean(boolean value) public Boolean(String string)
public      Byte(   byte value) public    Byte(String string)
public    Double( double value) public  Double(String string)
public   Integer(    int value) public Integer(String string)
public      Long(   long value) public    Long(String string)
public     Short(  short value) public   Short(String string)
public     Float(  float value) public   Float(String string)
public     Float( double value)
public Character(   char value)  

Für die Klasse Character gibt es keinen Konstruktor, welcher eine Stringrepräsentation auswertet. Die Klasse Void ist garnicht vertreten, denn diese kann nicht instanziiert werden. Sie dient internen Bibliotheken lediglich als Platzhalter für den Datentyp.

Das folgende Beispiel instanziiert eine Wrapper - Klasse und initialisiert sie mit einem Wert. Auch der Weg über eine Stringrepräsentation kann gegangen werden.


public class MyClass
{
  public static void main(String[] args)
  {
    Boolean b = new Boolean(true);
    Integer i = new Integer("10");
    
    System.out.println(b);
    System.out.println(i);
  }
}
    

true
10
    

» Abfragen des Wertes nach oben «

Die Wrapper - Klassen erlauben alle die Rückgabe des aktuellen Wertes passend zum verwalteten Datentyp und als String. Die folgende Liste zeigt die Methoden auf und in welchen Wrapper - Klassen sie verfügbar sind.

Methode
 
booleanValue()
   byteValue()
   charValue()
 doubleValue()
  floatValue()
    intValue()
   longValue()
  shortValue()
 
    toString()

Die Methode für eine Stringrepräsentation des aktuellen Wertes steht für alle Klassen zur Verfügung. Die Konvertierungen in einen Zeichentyp oder booleschen Wert hingegen ist nur für die spezifischen Klassen möglich.

Das folgende Beispiel instanziiert eine Wrapper - Klasse und initialisiert sie mit einem Wert. Dieser wird über zwei verschiedene Methoden ausgegeben.


public class MyClass
{
  public static void main(String[] args)
  {
    Float f = new Float(10.0); 
       
    System.out.println(f.floatValue());
    System.out.println(f.intValue());
  }
}
    

10.0
10
    

» Parsen von Strings nach oben «

Sechs der insgesamt neun Wrapper - Klassen stellen jeweils eine statische Methode zum Parsen eines Strings bereit. Sie erzeugen keine neuen Objekte, sondern dienen lediglich als Service. Sie parsen einen String und extrahieren den darin beschriebenen Wert.

Die folgende Tabelle zeigt alle Parser - Methoden und ihre entsprechende Wrapper - Klasse.

Methode
 
public static parseByte  (String string)
public static parseDouble(String string)
public static parseFloat (String string)
public static parseInt   (String string)
public static parseLong  (String string)
public static parseShort (String string)

Die Methoden liefern jeweils den Wert in Form eines elementaren Datentyps. Es existiert noch eine weitere Variante, welche den Wert eines Strings in Form einer bereits instanziierten Wrapper - Klasse liefert. Hierbei handelt es sich um die valueOf - Methoden. Diese werden von den folgenden sieben Klassen bereitgestellt.

Methode
 
public static Boolean valueOf(String string)
public static Byte    valueOf(String string)
public static Double  valueOf(String string)
public static Float   valueOf(String string)
public static Integer valueOf(String string)
public static Long    valueOf(String string)
public static Short   valueOf(String string)

Bei dieser Variante ist lediglich noch die Klasse Boolean hinzugefügt worden, die die Methode ebenfalls implementiert. Das folgende Beispiel demonstriert kurz die Nutzung beider Varianten.


public class MyClass
{
  public static void main(String[] args)
  {
    String s1 = "1000";
    String s2 = "True"; 
       
    System.out.println(Float.parseFloat(s1));
    System.out.println(Boolean.valueOf(s2));
  }
}
    

1000.0
true
    

» Konstanten nach oben «

Alle Wrapper - Klassen stellen diverse Konstanten zum Abruf bereit, welche unter anderem spezielle Werte oder die Bereichsgrenzen ihrer Werteklasse angeben. Welche Konstanten für welche Klassen abrufbar sind, können Sie der folgenden Tabelle entnehmen.

Konstante
 
MAX_VALUE
MIN_VALUE
TYPE
TRUE
FALSE
NaN
NEGATIVE_INFINITY
POSITIVE_INFINITY

Die Klasse Void wurde hier nicht mit eingetragen, da sie ohnehin nicht instanziiert werden kann. Das folgende Beispiel liefert einige Werte für ein Wrapper - Objekt eines spezifischen Typs.


public class MyClass
{
  public static void main(String[] args)
  {
    System.out.println(" Maximum     : " + Double.MAX_VALUE        );
    System.out.println(" Minimum     : " + Double.MIN_VALUE        );
    System.out.println(" Typ         : " + Double.TYPE             );
    System.out.println(" keine Zahl  : " + Double.NaN              );
    System.out.println(" + unendlich : " + Double.POSITIVE_INFINITY);
    System.out.println(" - unendlich : " + Double.NEGATIVE_INFINITY);
  }
}
    

 Maximum     : 1.7976931348623157E308
 Minimum     : 4.9E-324
 Typ         : double
 keine Zahl  : NaN
 + unendlich :  Infinity
 - unendlich : -Infinity
    

» Call by Reference nach oben «

Ein in ein Wrapper - Objekt verpackter primitiver Datentyp wäre an sich nun per Objektreferenz als Parameter für Methoden denkbar, da Objekte immer per Referenz übergeben werden.

Dennoch wird diese Möglichkeit dadurch unterbunden, dass alle Wrapper - Klassen unveränderlich sind. Somit lassen sich weder die eingetragenen Werte ändern, noch an den Aufrufer per Referenz zurückgeben.


« Kapitel Kapitelübersicht nach oben