\begin{slide}{Schranken für Typparameter (I)}

  \begin{itemize}
  \item kovariant: \verb|<T extends S>|

    als Argument ist jeder Typ $T$ erlaubt,
    der $S$ implementiert

\begin{verbatim}
interface Comparable<T> 
    { int compareTo(T x); }
static <T extends Comparable<T>> 
    T max (Collection<T> c) { .. }
\end{verbatim}

  \end{itemize}
  
\end{slide}

\begin{slide}{Schranken für Typparameter (II)}

\begin{itemize}
  \item kontravariant: \verb|<S super T>|

Als Argument ist jeder Typ $S$ erlaubt,
der Obertyp von $T$ ist.

\begin{verbatim}
static <T> int binarySearch
   (List<? extends T> list, T key,
   Comparator<? super T> c) 
\end{verbatim}
    
  \end{itemize}


  
\end{slide}

