Dein Code scheint formell die Anforderungen (falls die vollständig sind) zu erfüllen, ist aber nicht besonders sinnvoll. Die Instanz-Variable sollte vernünftig benannt werden (kleinschrieben, und hier wären es ja eben nicht Katzen, sondern Elemente, auf die sich der generische Typ T bezieht - dazu ganz unten mehr).
Eine Katze braucht keine Generics, zumindest fällt mir kein vernünftiger Anwendungsfall ein. Das T bedeutet nämlich “ein beliebiger, aber im Einzelfall fester Typ” - wofür sollte eine Katze das brauchen?
Ein sinnvolleres Beispiel wäre die Klasse Paar, die eben ein Paar von “irgendwas” abbildet - Strings, Zahlen oder Katzen:
public class Paar<T> {
private final T erstes;
private final T zweites;
public Paar(T erstes, T zweites) {
this.erstes = erstes;
this.zweites = zweites;
}
public T getErstes() { return erstes; }
public T getZweites() { return zweites; }
}
Jetzt kann man z.B. schreiben:
Paar<String> paar = new Paar("Adam","Eva");
String er = paar.getErstes();
String sie = paar.getZweites();
Paar<Integer> ergebnisBvbGegenBayernMuenchen = new Paar(2,1);
Du siehst, dass es der Klasse im Prinzip “egal” ist, welchen konkreten Typ sie als Generic hat, trotzdem kann man sie sinnvoll nutzen.
In diesem Fall weiß man, dass nur zwei Elemente des generischen Typs benötigt werden, aber wenn man Dinge wie Mengen oder Listen abbilden will, ist die Anzahl Elemente nicht bekannt, und dann könnte man intern das Objekt-Array sinnvoll einsetzen.
Ein Problem mit Arrays ist, dass sie keinen generischen Typ haben können. Du kannst also kein T[]
erzeugen. Natürlich kannst du stattdessen ein Object[]
verwenden, und dort Elemente vom Typ T
speichern. Wenn du sie wieder herausholst, haben sie allerdings den Typ Object
, und du musst sie zurück auf T
casten.