Generics

Hi,

Ich hab eine Aufgabe zu bearbeiten, verstehe aber nicht genau was es bedeuten soll, ich soll einen generischen Datentyp erstellen, der intern ein Array vom Typ Object nutzt.
Bisher sieht das bei mir so aus. Das ist sehr dürftig, aber mir geht es darum, ob mir jemand allgemein Generics erklären könnte, da meine Unterlagen zu dem Thema sehr dürftig ausfallen und ich schon viel im AllMightyInternet recherchiert habe und trotzdem nicht schlau werde

public class Katze <T> {
	
	Object[] Katze = new Object[10];
}

Liebe Grüße und bitte Dankeschön für jede Antwort

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.