Auf Thema antworten

[USER=29598]@JCODA[/USER] hat den meiner Meinung nach richtigen Vorschlag gebracht. Und, um bei einer solchen copy() Methode zu sagen, dass es auch den exakt selben Typ wie die Unterklasse von SchachFeld zurückliefert, und eben nicht nur SchachFeld - im Allgemeinen als "this"/"self"-type bezeichnet (siehe https://www.sitepoint.com/self-types-with-javas-generics/ ), kannst du "recursive generics" verwenden:

[code=java]abstract class SchachFeld<T extends SchachFeld<T>> {

  abstract T copy();

  ...

}[/code]

Jetzt wird sichergestellt, dass, egal welche konkrete Unterklasse von SchachFeld ableitet, seine eigene copy() Implementierung auch sich selbst als Typ zurückliefert und nicht nur SchachFeld.

Ableiten würdest du dann so:

[code=java]class TollesSchachFeld extends SchachFeld<TollesSchachFeld> {

  public TollesSchachFeld copy() {

    return ...

  }

}[/code]

Dasselbe Konstrukt wird für Enums verwendet, um den Typ der Operationen auf einer konkreten Enum-Implementierung auch geschlossen über dieser Enum-Klasse zu haben (alle Operationen nehmen und liefern diesen konkreten Enum-Typ).



Oben