Generische Klassen und Schnittstellen - thkwalter/physik GitHub Wiki

Generische Klassen und Schnittstellen

  • Die allgemeine Syntax einer Klassendeklaration lautet

    NormalClassDeclaration :
       {ClassModifier} "class" TypeIdentifier [TypeParameters] [ClassExtends] [ClassImplements] [ClassPermits] 
          ClassBody
    
  • Die Produktionsregeln für das Element TypeParameters lauten dabei

    TypeParameters :
       "<" TypeParameterList ">" 
    
    TypeParameterList :
       TypeParameter {, TypeParameter }
    

    Die Produktionsregeln für das Element TypeParameter finden sich auf der Wiki-Seite "Typparameter".

  • Enthält eine Klassendeklaration Typparameter, so spricht man von einer generischen Klasse.

  • Die allgemeine Syntax einer Schnittstellendeklaration lautet

    NormalInterfaceDeclaration :
       {interfaceModifier} "interface" TypeIdentifier [TypeParameters] [InterfaceExtends] [InterfacePermits] 
          InterfaceBody
    
  • Enthält eine Schnittstellendeklaration Typparameter, so spricht man von einer generischen Schnittstelle.

Parametrisierte Typen

  • Ein parametrisierter Typ besitzt die Syntax

    TypeIdentifier TypeArguments
    

    Dabei muss der TypeIdentifier eine generische Klasse oder Schnittstelle bezeichnen und jedes Typargument der Bounds-Klausel des entsprechenden Typparameters genügen.

Beispiele

  • Ein einfaches Beispiel

    public class MyGenericBean<T>
    {
    private T object;
    
    public T getObject()
       {
       return this.object;
       }
    
    public void setObject(T object)
       {
       this.object = object;
       }
    }
    

     

    public class Example1
    {
    public static void main(String[] args)
       {
       MyGenericBean<String> bean = new MyGenericBean<>();
       bean.setObject("Hello World!");
    
       System.out.println(bean.getObject());
       }
    }
    
  • Ein komplexes Beispiel

    public interface Quantity<Q extends Quantity<Q>>
    {
    ...
    }
    
    
    public interface Time extends Quantity<Time> 
    {
    }
    
⚠️ **GitHub.com Fallback** ⚠️