Til fasit   Oppgave 6

Legg flg. kode på filen Testprogram.java:

public class Testprogram
{
  public static <T extends Comparable<T>> int maks(T[] a)
  {
    return 0;
  }

  public static void main(String... args)
  {
    A[] a = new A[1];
    B[] b = new B[1];
    C[] c = new C[1];

    maks(a);
    maks(b);
    maks(c);
  }
}

class A implements Comparable<A>
{
  public int compareTo(A a) { return 0; }
}

class B extends A {}

class C implements Comparable<Object>
{
  public int compareTo(Object o) { return 0; }
}

Oppgaver:

  1. Her vil setningen maks(c); gi en syntaksfeil. Se om du kan forstå feilmeldingen.
  2. Kommenter vekk maks(c); Da er det ingen syntaksfeil og koden er kjørbar. Kjør koden. Det kommer ingen utskrift. Poenget er å vise at det ikke kommer noen runtimefeil. Det betyr at typebegrensningen <T extends Comparable<T>> er tilstrekkelig for en type som oppyller Definisjon 1.4.2 og subtyper av en slik type.
  3. Gjør så om til <T extends Comparable<? super T>> i maks-metoden. Ta metodekallet maks(c); tilbake. Da virker alt. Sjekk det.