Hallo ich soll für die uni ein Klassengerüst erstellen:
Zuerst sollte ich eine abstrakte classe Tier und dann eine abstrakte extension Säugetier erstellen. Dann die interfaces giftig, schwimmend und kinderfreundlich erstellen.
Danach sollte ich eine generische Klasse Gehege und Aquarium erstellen um anhand der Interfaces die Tiere zu filtern, die nicht schwimmen können. Habe das über <T> versucht.
Wäre das so ok?
Als nächstes soll ich eine statische Methode public static <T … > Gehege<T> entferneGiftigesSaeugetierAusStreichelZoo(T tier) erstellen, mit der man die nicht kinderfreundlichen Säugetiere, wie den giftigen Schlitzrüssler (Wikipedia: Schlitzrüssler) und die giftigen Schnabeltiere (Wikipedia: Schnabeltier) aus dem Streichelzoo entfernen kann. Dabei muss beachtet werden, dass Schlitzrüssler nicht schwimmen können und in ein Gehege gebracht werden müssen. Schnabeltiere können sowohl in ein Gehege als auch in ein Aquarium gebracht werden.
Kann mir bei der Aufgabe jemand helfen oder nen paar tipps geben?
Deine Klasse ist zwar durch <T> getypt, hat aber keinerlei Einschränkungen (z.B. <T extends schwimmend>), womit T im Grunde alles sein kann.
Mehrere Tiere kannst du durch eine Liste oder ein Set realisieren. Wobei ich mir ehrlich gesagt nicht sicher bin, wie die Aufgabenstellung geplant ist. Soll der Zoo viele Gehege mit je einem Tier besitzen oder zwei Gehege mit jeweils ganz vielen Tieren? (Zwei Gehege wären bei nem normalen Zoo sinnfrei, ich weiß, aber trotzdem könnte es so gefordert sein).
Könntest du bitte die komplette Aufgabenstellung posten? (Screenshot reicht auch).
publicclassGehege{publicList<ILandAnimal> list;// Sorry für diese Bezeichnung, mir ist im moment nichts besseres eingefallen// Jedoch sollte man ja keine schwimmende Tiere in ein Gehege nehmen dürfen// deswegen muss man diese ja ausgrenzen.publicaddAnimal(ILandAnimal animal){
list.add(animal);}}
PS:
Die listen sollten im Konstruktor instanziiert werden.
@Christopher25
Die Klassen Aquarium und Gehege sind nicht generisch wie in der Aufgabe gefordert.
Vorteil der Generics sind, dass man ein Gehege erstellen kann, das nur kinderfreundliche Tiere enthält und ein zweites Gehege, das nur giftige Tiere enthält. In deinem Vorschlag ist diese Trennung nicht wirklich möglich, da man kinderfreundliche und giftige Tiere mischen kann.
@Christopher25
Die Klassen Aquarium und Gehege sind nicht generisch wie in der Aufgabe gefordert.
Vorteil der Generics sind, dass man ein Gehege erstellen kann, das nur kinderfreundliche Tiere enthält und ein zweites Gehege, das nur giftige Tiere enthält. In deinem Vorschlag ist diese Trennung nicht wirklich möglich, da man kinderfreundliche und giftige Tiere mischen kann.
publicclassGehege{publicList<ILandAnimal> list;// Sorry für diese Bezeichnung, mir ist im moment nichts besseres eingefallen// Jedoch sollte man ja keine schwimmende Tiere in ein Gehege nehmen dürfen// deswegen muss man diese ja ausgrenzen.publicvoidaddAnimal(ILandAnimal animal){
list.add(animal);}publicvoidremoveAnimal(ILandAnime animel){
list.remove(animal);}}
PS:
Die listen sollten im Konstruktor instanziiert werden.
Java:
publicstaticGehege<Tier>entferneGiftigesSaeugetierAusStreichelZoo(Gehege oldGehege,IGiftig giftigesTier){
oldGehege.removeAnimal(giftigesTier);Gehege<Tier> g =newGehege();
g.add(giftigesTier);return g;}
Oh mist das hab ich von der verbesserung von der Methode davor übernommen. Was ich eigentlich meinte war, ich hab in der Methode davor Tier durch Säugetier ersetzt, bei dieser Methode habe ich die änderung einfach versehendlich übernommen ^^
Java:
publicstaticGehege<Tier>entferneGiftigesSchwimmendesSaeugetierAusStreichelZoo(Gehege oldGehege,IGiftig giftigesTier){
oldGehege.removeAnimal(giftigesTier);Aquarium<ISchwimmend> a =newAquarium();
a.add(giftigesTier);return a;}
Das Aquarium braucht keinen Generic da das Aquarium nur die List besitzt, welche schon den Generic ISchwimmend besitzt.
Das Gleiche auch mit dem Gehege =)
Das Aquarium braucht keinen Generic da das Aquarium nur die List besitzt, welche schon den Generic ISchwimmend besitzt.
Das Gleiche auch mit dem Gehege =)
Wenn du das unbedingt mit Generics machen möchtest, dann mach folgendes.
So hab das ganze jetzt mal so zusammen gebaut, allerdings sagt er mir da, dass "new Gehege<>();" keine enclosing instance of type ArrayIterator verfügbar ist. Was fehlt denn da noch?