Collections Collection soll nur einen bestimmten Datentyp aufnehmen

Biobauer

Mitglied
Hallo,

Wie kann ich einer Klasse

Java:
public class Hof<Henne> extends ArrayList<Henne> implements Collection<Henne> {}

sagen, dass sie NUR objekte der Klasse Huehner() aufnehmen soll und nicht sonst nichts ( zB. Schnweine Kühe...)
 
Zuletzt bearbeitet von einem Moderator:
Code:
List<Huehner> list = new ArrayList<Huehner>();

Dann nimmt die Liste nur noch Huehner-Objekte auf.
Von ArrayList zu erben, macht keinen echten Sinn. Wende die Klasse einfach nur an.
 
public class Hof<Henne> extends ArrayList<Henne> implements Collection<Henne>

Was möchtest Du mit dieser Zeile ausdrücken?

Du brauchst eine Collection (Liste), die nur Objekte vom Typ Huehner aufnehmen kann?

Java:
List<Huehner) deineCollection  = ...
Beispielsweise instanzierst Du die Collection mit einer realen Implememtierung:

Java:
deineCollection  = new ArrayList<>();
 
Ich möchte eine Klasse haben, die das Interface Collection implementiert und von ArrayList erbt.

Sie soll allerdings nur ein bestimmtes Objekt aufnhemen können.
 
Das ist aber Unsinn.
[JAPI]ArrayList[/JAPI] ist bereits eine [JAPI]Collection[/JAPI], weil sie das Interface Collection implementiert.
Wenn du jetzt auch noch 'ne Klasse schreibst, die von ArrayList erbt, und auch selbst noch Collection implementiert, ist das Unfug.
Allein das Erben von ArrayList, nur um dann Objekte eines Typs darin zu speichern ist schon Unsinn.

[JAPI]AbstractList[/JAPI] implementiert ebenfalls Collection... :bahnhof:
 
Das Problem liegt wohl darin, dass

Java:
public class Hof<String>  {}

hier String eine Wildcard ist und nicht die Klasse String (oder Henne im Bsp).

Java:
public class Hof<T>  {}

Hier ist T die Wildcard. Eine Klasse kann nicht direkt mit Henne definiert werden. Höchstents
Java:
public class Hof<T extends Tier>  {}
oder sowas

EDIT:
Was dann zB so aussehen würde:

Java:
public class Hof<T extends Tier> extends ArrayList<T> {
	
	public static void main(String[] args) {
		Hof<Henne> hof = ...
	}
}
 
Das ist aber Unsinn.
[JAPI]ArrayList[/JAPI] ist bereits eine [JAPI]Collection[/JAPI], weil sie das Interface Collection implementiert.

Ob man http://www.java-forum.org/allgemein...lplementierte-interfaces-nochmal-impleme.html nts dazuschreiben sollte ist wohl eher eine Stilfrage - auch wenn in diesem Fall schon die Wahl zwischen Iterable, Collection und List schwer fallen würde.

Insgesamt klingt das aber, als sollte man "Composition over Inheritance" hier nochmal einwerfen. Es gibt IMHO praktisch keinen Fall, wo es sinnvoll ist, von einer Collection zu erben.
 

Neue Themen


Zurück
Oben