javaseiten.de   |   Version 0.6
 

3.2. Definition von generischen Typen

Ein generischer Typ ist ebenfalls ein Referenztyp, der jedoch ein oder mehrere Typparameter besitzt. Die folgenden Ableitungsregeln für eine normale Klassendeklaration verdeutlichen, an welcher Stelle Typparamter vorgesehen sind (siehe Java Language Specification linkextern.gif):

ClassModifiers_opt class Identifier TypeParameters_opt Super_opt Interfaces_opt 
    ClassBody

TypeParamters:
        < TypeParamterList >
        
TypeParamterList:
        TypeParamter
        TypeParamterList , TypeParamter

Nach dem Schlüsselwort class und der Namensbezeichnung der Klasse (Identifier) können optional ein oder mehrere Typparamter innerhalb eines spitzen Klammerpaares "<>" aufgeführt werden. Beispiele, die aus den genannten Produktionen resultieren, sind:

public class Holder<E> { ... }
public class Holder2<K,V> { ... }

Es wurde jeweils der Klassenmodifikator public verwendet, die Namensbezeichnungen der Klassen (Identifier) lauten Holder und Holder2 mit den jeweiligen Typparamtern E, K und V innerhalb der spitzen Klammern. Das anschließende kurze Listing definiert den generischen Typ Holder<E>. Dieser Typ kann dazu verwendet werden, um einen beliebigen Referenztyp zu "halten" (speichern); dazu werden die beiden Methoden set und get bereitgestellt (siehe auch Listing 3.4):

Listing 3.2. Holder.java. Definition des Generischen Typs Holder<E>.

/* 
 * Holder.java 
 * JDK 5
 *
 */

public class Holder<E> {
  
  private E value;
  
  public void set(E v) {
    value = v;
  }  
  
  public E get() {
    return value;
  }
}

Das nächste Beispiel definiert einen generischen Typ mit zwei Typparametern, um zwei beliebige Referenztypen aufnehmen bzw. wieder abfragen zu können. Mit der Methode set können zwei Referenztypen gesetzt werden und mit getKey und getValue ist es möglich die zuvor aufgenommenen Typen wieder einzeln abzufragen (siehe auch Listing 3.4):

Listing 3.3. Holder2.java. Definition des Generischen Typs Holder2<K,V>.

/* 
 * Holder2.java 
 * JDK 5
 *
 */

public class Holder2<K,V> {
  
  private K key;
  private V value;
  
  public void set(K k, V v) {
    key = k;
    value = v;
  }  
  
  public K getKey() {
    return key;
  }

  public V getValue() {
    return value;
  }  
}

 

 

 

Diese Seite nutzt Google-Dienste - siehe dazu Datenschutz.

Copyright © 2006, 2007 Harald Roeder