Ich schaue mir jetzt schon seit längerem Java Generics und auch die Wildcards an, die man da verwenden kann aber mir ist immer noch nicht so ganz klar, wofür man Generics bei der Signatur einer Schnittstelle nimmt und was man damit aussagt und was das folgende zu bedeuten hat.
Bspw. das hier:
Was sagt das <T extends IPrototype<T>> aus? Das steht ja so nur im Kontext des Rückgabewertes der Methode oder bezieht sich das auch auf den Paramter T, den man der Methode übergibt?
Wird damit sichergestellt, dass man nur einen Typ zurückgeben kann, der die Schnittstelle IPrototype implementiert hat?
Und hier ist noch das andere, was ich am Anfang meinte
Was sagt man damit aus?
Das war Teil einer Aufgabe, wo es darum ging eine Factory zu schreiben, mit der man neue Objekte vom Typen T erzeugen kann, welche das Marker Interface IPrototype implementieren.
Die zwei Aspekte sind mir ja bei dem Thema noch nicht so ganz klar. Was Kovariante und Kontravariante Listen sind und was man mit Generics erreichen will ist mir klar.
Bspw. das hier:
Java:
public <T extends IPrototype<T>> T create(T prototype) throws Exception {
Class<T> type = (Class<T>) prototype.getClass();
return create(type);
}
Was sagt das <T extends IPrototype<T>> aus? Das steht ja so nur im Kontext des Rückgabewertes der Methode oder bezieht sich das auch auf den Paramter T, den man der Methode übergibt?
Wird damit sichergestellt, dass man nur einen Typ zurückgeben kann, der die Schnittstelle IPrototype implementiert hat?
Und hier ist noch das andere, was ich am Anfang meinte
Java:
public interface IPrototype<T extends IPrototype<T>> {
}
Was sagt man damit aus?
Das war Teil einer Aufgabe, wo es darum ging eine Factory zu schreiben, mit der man neue Objekte vom Typen T erzeugen kann, welche das Marker Interface IPrototype implementieren.
Die zwei Aspekte sind mir ja bei dem Thema noch nicht so ganz klar. Was Kovariante und Kontravariante Listen sind und was man mit Generics erreichen will ist mir klar.