package generics; import java.util.ArrayList; import java.util.Collection; import java.util.LinkedList; import java.util.List; class Person { private String mName; Person(String pName) { mName = pName; } public String toString() { return mName; } public String getName() { return mName; } } class Student extends Person { private int mMatrikelNummer; Student(String pName, int pMatrikelNummer) { super(pName); mMatrikelNummer = pMatrikelNummer; } } class Angestellter extends Person { private double mSalaer; Angestellter(String pName, double pSalaer) { super(pName); mSalaer = pSalaer; } } class TeilzeitAngestellter extends Angestellter { private double mPensum; TeilzeitAngestellter(String pName, double pSalaer, double pPensum) { super(pName, pSalaer); mPensum = pPensum; } } public class WildcardsPersonen { static void printCollection(Collection c) { for (Object e : c) { System.out.println(e); } } static List erzeugeNamensListe(List pPersonenListe) { List nameList = new ArrayList(); for (Person p : pPersonenListe) { nameList.add(p.getName()); } return nameList; } static void alleAngestellte(List pAngestellte) { // ... Daten z.B. von DB beschaffen ... // ... Daten der Liste hinzufügen ... z.B. im Sinne: pAngestellte.add(new Angestellter("Jones", 1234)); pAngestellte.add(new TeilzeitAngestellter("Miller", 1234, 0.40)); // ... Angestellter angestellter = (Angestellter)pAngestellte.get(0); assert(angestellter != null); Object angestellterObj = pAngestellte.get(0); assert(angestellterObj != null); } public static void main(String[] args) { System.out.println("\nWildcard:"); List personenListe = new LinkedList(); personenListe.add(new Person("Jones")); personenListe.add(new Person("Smith")); printCollection(personenListe); System.out.println("\nUpper Bound Wildcard:"); List studentenListe = new LinkedList(); studentenListe.add(new Student("Bond", 007)); studentenListe.add(new Student("Doppel-Bond", 2 * 007)); List namensListe = erzeugeNamensListe(studentenListe); printCollection(namensListe); System.out.println("\nLower Bound Wildcard:"); List angestellte = new ArrayList(); alleAngestellte(angestellte); List personen = new ArrayList(); alleAngestellte(personen); printCollection(personen); } // main() } /* Session-Log: Wildcard: Jones Smith Upper Bound Wildcard: Bond Doppel-Bond Lower Bound Wildcard: Jones Miller */