Generics und Comparable Interface

Studi123

Mitglied
Hallo!
Ich hänge grad an einer alten Klausuraufgabe (siehe Anhang)

Mein Lösungsvorschlag wäre:

Java:
public class Max {
	public static implements Comparable<T>
		T max(T x,T y){
		if(x.compareTo(y)>=0) return x;
		else return y;
	}
}

Stimmt das so? Bin verwirrt weil T max(T.. in der nächsten Zeile erst steht.
 

Anhänge

  • 5.JPG
    5.JPG
    52,3 KB · Aufrufe: 44
Java:
public static implements Comparable<T>
        T max(T x,T y){
        if(x.compareTo(y)>=0) return x;
        else return y;
    }

Das ist nicht mal kompilierbar.

Du musst den generischen Typ T noch deklarieren. Dabei kannst du dann auch anfordern, dass T das Interface Comparable implementiert.

Java:
	public static <T extends Comparable<T>> T max(T x, T y)
	{
		if (x.compareTo(y) >= 0)
			return x;
		else
			return y;
	}
 
Danke 🙂 okay die schreibweise verwirrt mich jetzt total. Also Generics bzw. hier das T wird verwendet wenn ich nicht weiß welcher Datentyp da eingesetzt wird bzw. ich das flexibel halten möchte, richtig?

Das erste T ist für den Rückgabetyp, aber was macht das T vor max in der Zeile?
 
Nun entweder du definierst dir deinen Generic Typ für deine Klasse:
Java:
public class Example<T>
{
  //...
}
oder du musst den in deiner Methode definieren:
Java:
public <T> T exampleMethod()
{
  //...
}

Bei Methoden musst du vor dem Returntyp eben noch den Generictyp schreiben.
 
Zur Richtigstellung ist diese Methode nicht statisch, denn in der letzten Aufgabe wird eine Instanz angelegt und darauf max(...); aufgerufen. Also sollte es richtig so aussehen:

Java:
public class Max {
    public <T extends Comparable<T>> T max(T x,T y){
        if(x.compareTo(y)>=0) return x;
        else return y;
    }
}
 

Zurück
Oben