home  |  suche  |  kontakt/johner  |  institut 
studierende  |  tech-docs  |  mindmailer 

Bisher

Bisher boten Container (Map, Collection) keine Typsicherheit an. Zur Laufzeit konnte eine ClassCastException auftreten. Beispiel:

package org.johner.java5;

import java.util.GregorianCalendar;
import java.util.Iterator;
import java.util.Vector;

public class PreGenerics {
  public static void main (String[] args) {
    Vector studenten = new Vector();
    studenten.add(new Student("Gerda"123456));
    studenten.add(new GregorianCalendar())
    
    for (int i = 0; i < studenten.size(); i++) {
      Student student = (Student)studenten.get(i);//ClassCastException!!
      System.out.println("Der Studierende heisst: " + student.getName());
    }
  }
}

Java 5

Die Generic in Java 5 führen zu Typsicherheit. Die Container werden typisiert, indem der Klassennamen ihrer Elemente in spitzen Klammern angehängt wird. Beispiel:

 

Vector<Student> studenten = new Vector<Student>();

 

In Containern mit Schlüsseln (z.B. Hashtable) können sowohl die Schlüssel als auch die Wertepaare typisiert werden (s. Beispiel "2.").

Ebenso ist es möglich, typisierte Container als Elemente eines typisierten Containers zu nutzen (s. Beispiel "3.").

Hingegen können keine Arrays aus typsierten Containern gebildet werden (s. Beispiel "4."). Entweder muss auf die Typisierung verzichtet werden (s. Beispiel "4. (A1)") oder eine "Collection einer Collection" gebildert werden (s. Beispiel "4. (A2)").

Beispiel:

package org.johner.java5;

import java.util.ArrayList;
import java.util.Collection;
import java.util.GregorianCalendar;
import java.util.Hashtable;
import java.util.Vector;

public class Generics {
  public static void main (String[] args) {
    //1. Vector
    Vector<Student> studenten = new Vector<Student>();
    studenten.add(new Student("Gerd"123456));
    studenten.add(new Student("Gerd1"654321));
    //studenten.add(new GregorianCalendar()); //geht nicht!!
    
    for (int i = 0; i < studenten.size(); i++) {
      Student student = studenten.get(i);
      System.out.println("Studierende: " + student.getName());
    }
    
    //2. Hashtable
    Hashtable<Integer, String> table = 
      new Hashtable<Integer, String>();
    table.put(new Integer(0)"Gerd");
    table.put(new Integer(1)"Gerda");
    
    //3. Combination
    Hashtable<Integer, Vector<Student>> table2 = 
      new Hashtable<Integer, Vector<Student>>();
    table2.put(new Integer(1), studenten);
    
    //4. Arrays sind nicht möglich
    //Object[] someData = new Vector<Student>[10]; //geht nicht!!
    Object[] someData = new Vector<?>[10]//(A1) 
    Collection sameData = new ArrayList<Vector<Student>>()//(A2) 
  }
}