Generische Typen

Deamon1337

Mitglied
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.
Java:
  abstract class Tier{
    
   }
   abstract class Säugetier extends Tier{
   }  
   }
  
   public interface giftig <G>
   }
   public interface schwimmend <T>{
   }
   public interface kinderfreundlich <G>{
   }
   public class Aquarium <T>{
     private T object;
     public void setObject(T object){
       this.object =object;
     }
     public T getObject(){
       return object;
     }
   }
   public class Gehege <G>{
     private G object;
     public void setObject(G object){
       this.object =object;
     }
     public G getObject(){
       return object;
     }
    

   }
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?

Vielen dank für jede Hilfe,

Gruß Deamon1337
 
Zuletzt bearbeitet von einem Moderator:

Saheeda

Top Contributor
Dein Aquarium kann bisher nur ein Tier aufnehmen. Außerdem darf momentan noch jedes Tier hinein, egal ob schwimmfähig oder nicht.
 

Saheeda

Top Contributor
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).
 

Christopher25

Bekanntes Mitglied
probier mal folgendes.

Java:
public class Aquarium {
public List<ISchwimmend> list;

public addAnimal(ISchwimmend animal) {
list.add(animal);
}
}
Java:
public class Gehege{
public List<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.
public addAnimal(ILandAnimal animal) {
list.add(animal);
}
}

PS:
Die listen sollten im Konstruktor instanziiert werden.
 
Zuletzt bearbeitet:

Tarrew

Top Contributor
@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.
 

thecain

Top Contributor
Ich behaupte mal, generische Interfaces sind für diese Aufgabe nicht nötig.
dafür jedoch die Klassen generisch.

Dafür aber ein generisches Gehege public class Gehege<T>
 

Deamon1337

Mitglied
Also müsste das ganze dann so aussehen?

Java:
  abstract class Tier{
    
   }
   abstract class Säugetier extends Tier{
   }  
   }
  
   public interface giftig <ILandAnimal>{
    
    
   }
   public interface schwimmend <ISchwimmend>{
    
   }
   public interface kinderfreundlich <ILandAnimal>{
    
   }
   public class Aquarium {
   public List<ISchwimmend> list;

   public addAnimal(ISchwimmend animal) {
   list.add(animal);
   }
   }
   public class Gehege{
   public List<ILandAnimal> list;


   public addAnimal(ILandAnimal animal) {
   list.add(animal);
   }
   }

Soweit so gut.
 

Christopher25

Bekanntes Mitglied
@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.

Wenn diese Trennung wie du es sagst von statten ginge, wäre die Komplette Aufgabe C und D für die Katz.

Hier nochmal ein korregierter/erweiterter Vorschlag von mir:

probier mal folgendes.

Java:
public class Aquarium {
public List<ISchwimmend> list;

public addAnimal(ISchwimmend animal) {
list.add(animal);
}
}
Java:
public class Gehege{
public List<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.
public void addAnimal(ILandAnimal animal) {
list.add(animal);
}

public void removeAnimal(ILandAnime animel) {
list.remove(animal);
}
}

PS:
Die listen sollten im Konstruktor instanziiert werden.


Java:
public static Gehege<Tier> entferneGiftigesSaeugetierAusStreichelZoo(Gehege oldGehege, IGiftig giftigesTier) {

oldGehege.removeAnimal(giftigesTier);

Gehege<Tier> g = new Gehege();
g.add(giftigesTier);

return g;
}
 

Deamon1337

Mitglied
Java:
public static Gehege<Tier> entferneGiftigesSaeugetierAusStreichelZoo(Gehege oldGehege, IGiftig giftigesTier) {

oldGehege.removeAnimal(giftigesTier);

Gehege<Säugetier> g = new Gehege();
g.add(giftigesTier);

return g;
}
Hab mal Tier durch Säugetier ersetzt.
Dann könnte d ja vielleicht so aussehen:
Java:
public static Gehege<Tier> entferneGiftigesSchwimmendesSaeugetierAusStreichelZoo(Gehege oldGehege, IGiftig giftigesTier) {

oldGehege.removeAnimal(giftigesTier);

Aquarium<[B]Säugetier[/B]> a = new Aquarium();
a.add(giftigesTier);

return a;
}
 

Christopher25

Bekanntes Mitglied
Hab mal Tier durch Säugetier ersetzt.
Dann könnte d ja vielleicht so aussehen:
Java:
public static Gehege<Tier> entferneGiftigesSchwimmendesSaeugetierAusStreichelZoo(Gehege oldGehege, IGiftig giftigesTier) {

oldGehege.removeAnimal(giftigesTier);

Aquarium<[B]Säugetier[/B]> a = new Aquarium();
a.add(giftigesTier);

return a;
}

Das Aquarium darf doch nur schwimmende Tiere aufnehmen, warum also dann alle Säugetiere??
 

Deamon1337

Mitglied
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:
public static Gehege<Tier> entferneGiftigesSchwimmendesSaeugetierAusStreichelZoo(Gehege oldGehege, IGiftig giftigesTier) {

oldGehege.removeAnimal(giftigesTier);

Aquarium<ISchwimmend> a = new Aquarium();
a.add(giftigesTier);

return a;
}
 

Christopher25

Bekanntes Mitglied
Oh mist das hab ich von der verbesserung von der Methode davor übernommen.
Java:
public static Gehege<Tier> entferneGiftigesSchwimmendesSaeugetierAusStreichelZoo(Gehege oldGehege, IGiftig giftigesTier) {

oldGehege.removeAnimal(giftigesTier);

Aquarium<ISchwimmend> a = new Aquarium();
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 =)
 
Zuletzt bearbeitet:

Deamon1337

Mitglied
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.

Java:
public class Aquarium<ISchwimmend> extends ArrayList<ISchwimmend> {}

In der Aufgabe steht ja es sollen generic Klassen sein daher denke ich ich hab da keine Wahl :p
 

thecain

Top Contributor
Was macht ihr denn da?

Java:
public class Gehege <T> {

    private List<T> tiere;
    public Gehege() {
        this.tiere = new ArrayList<>();
    }

    public void add(T tier) {
        tiere.add(tier);
    }

    public static <T extends Giftig> Gehege<T> entferneGiftigesTierAusStreichelzoo(T tier) {
        Gehege<T> gehege = new Gehege<>();
        gehege.add(tier);
        return gehege;
    }
}

public class Aquarium<T extends Schwimmend> {
    public Aquarium () {
        List<T> list = new ArrayList<>();
    }

    public void add(T tier) {
        list.add(tier);
    }
}

Sorry für soviel Lösung vorwegnehmen, aber da oben steht zuviel komischer Code...

Die Interfaces Schwimmend und Giftig kann man sich dazudenken.
 

Deamon1337

Mitglied
Java:
 abstract class Tier{
           
        }
        abstract class Säugetier extends Tier{
           
        }
        interface Giftig {
           
        }
        interface Schwimmend {
           
        }
        interface Kinderfreundlich {
           
        }
        public class Gehege <T> {

           private List<T> tiere;

           public Gehege() {
               this.tiere = new ArrayList<>();
           }

           public void add(T tier) {
               tiere.add(tier);
           }

        }
       public static <T extends Giftig> Gehege<T> entferneGiftigesTierAusStreichelzoo(T tier) {
           Gehege<T> gehege = new Gehege<>();
           gehege.add(tier);
           return gehege;
       } 

        public class Aquarium<T extends Schwimmend> {
            private List<T> list;
           public Aquarium () {
               this.list = new ArrayList<>();
           }

           public void add(T tier) {
               list.add(tier);
           }
        }

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?
 

InfectedBytes

Top Contributor
Du hast die Klasse Gehege innerhalb der Klasse Tier geschrieben.
Entweder Gehege in eine eigene Datei legen oder:
Java:
public static class Gehege { ...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Generische Typen für dynamisches Formular Java Basics - Anfänger-Themen 3
O Generische Typen Java Basics - Anfänger-Themen 9
C unterschied generische typen und supertypen als methodenparameter Java Basics - Anfänger-Themen 3
F Generische Typen auch für statische Methoden? Java Basics - Anfänger-Themen 13
B instanceof Prüfung für generische Typen Java Basics - Anfänger-Themen 5
I Generische Funktion Java Basics - Anfänger-Themen 3
A Generische Klassen/Interface Java Basics - Anfänger-Themen 1
H Generische Konstruktor Java Basics - Anfänger-Themen 12
Kirby.exe Generische Objekt Instanz erstellen Java Basics - Anfänger-Themen 14
D Generische Klasse Java Basics - Anfänger-Themen 6
H linkedlist generische klassen Java Basics - Anfänger-Themen 169
M Datentypen Generische Datentypen - Syntax Java Basics - Anfänger-Themen 25
M Generische Klassen "FlaschenRegal" Java Basics - Anfänger-Themen 13
Queiser Datentypen 2 generische Datentypen für eine Schnittstelle Java Basics - Anfänger-Themen 1
M Generische Liste aus Comparable-Objekten Java Basics - Anfänger-Themen 6
J Sortierte generische Liste Java Basics - Anfänger-Themen 1
D statische generische Methoden Java Basics - Anfänger-Themen 3
S Wie muss ich die Generische Methode schreiben? Java Basics - Anfänger-Themen 6
M Methoden Generische Klasse - ändern einzelner Attributwerte Java Basics - Anfänger-Themen 2
S generische methode mit verschiedenen datentypen Java Basics - Anfänger-Themen 3
N Generische Schnittstellen Java Basics - Anfänger-Themen 2
B generische LinkedList nach Häufigkeit der Elemente füllen Java Basics - Anfänger-Themen 6
S Erste Schritte Generische Klassen sind toll ....aber warum sollte ich das je benutzen? Java Basics - Anfänger-Themen 3
L Generische Liste Java Basics - Anfänger-Themen 4
B Generische Queue programmieren Java Basics - Anfänger-Themen 5
S Generische Methode soll Objekte als Parameter erlauben die bestimmtes Interface implementieren^ Java Basics - Anfänger-Themen 9
A Probleme mit MergeSort Generische Liste Java Basics - Anfänger-Themen 0
A Generische Methode Java Basics - Anfänger-Themen 4
H Collections List in List<SpecificType> als stat. generische Methode zurückgeben Java Basics - Anfänger-Themen 4
J Probleme mit static generische Klasse Java Basics - Anfänger-Themen 6
M Generische Liste Java Basics - Anfänger-Themen 4
B Generische Methode Java Basics - Anfänger-Themen 2
B Generische Klasse Java Basics - Anfänger-Themen 7
B Generische Methoden Java Basics - Anfänger-Themen 8
F Collections Generische Klasse/Methoden Java Basics - Anfänger-Themen 19
L Generische Warteschlange Java Basics - Anfänger-Themen 8
A Generische Datentypen Java Basics - Anfänger-Themen 8
bluerob generische ArrayList -> erbende Objekte auslesen Java Basics - Anfänger-Themen 24
L Generische Containerklasse Java Basics - Anfänger-Themen 9
V Methoden Umwandlung in generische Methode Java Basics - Anfänger-Themen 8
A Generische Collections und Vererbung Java Basics - Anfänger-Themen 2
S Generische HashMap Java Basics - Anfänger-Themen 2
M Klassen Generische Klassen, Personen und Gruppen Java Basics - Anfänger-Themen 6
L Generische ArrayList, CastProblem Java Basics - Anfänger-Themen 2
W generische Module Java Basics - Anfänger-Themen 2
S Generics und "generische Feldzuweisungen" Java Basics - Anfänger-Themen 5
D Datentypen Generische Collections und Warnings Java Basics - Anfänger-Themen 8
F Generische Methoden Problem Java Basics - Anfänger-Themen 5
E Generische Arrays durch Typecast mit Object-Array Java Basics - Anfänger-Themen 11
K Generische Klasse mit innerer Klasse | Problem mit Array Java Basics - Anfänger-Themen 6
B Was passiert, wenn eine konkrete Klasse von generische Klasse erbt? Java Basics - Anfänger-Themen 14
B Generische Vererbung was ist der Unterschied? Java Basics - Anfänger-Themen 4
W Generische Klassen Java Basics - Anfänger-Themen 3
W Generische Klassen und Casting Java Basics - Anfänger-Themen 6
J array über generische arraylist Java Basics - Anfänger-Themen 7
N 2 dimensionale generische Arrays Java Basics - Anfänger-Themen 9
H Statische generische Methode Java Basics - Anfänger-Themen 2
G Frage zum Ungang mit Generische Datentypen Java Basics - Anfänger-Themen 4
0x7F800000 generische arrays mal wieder )-; Java Basics - Anfänger-Themen 6
D generische methode <T> void . Java Basics - Anfänger-Themen 9
J Generische Methoden Java Basics - Anfänger-Themen 6
G Doppelt verkettete, generische Liste Java Basics - Anfänger-Themen 11
S Parameterübergabe: Generische Klasse Java Basics - Anfänger-Themen 4
S generische Felder Java Basics - Anfänger-Themen 2
P Generische Klasse Java Basics - Anfänger-Themen 8
C Generische Klassen, das erste Mal. Java Basics - Anfänger-Themen 8
F Generische Methode - was bringt der Wildcard Operator? Java Basics - Anfänger-Themen 7
F Generische Liste von generischen Objekten. Java Basics - Anfänger-Themen 3
H generische Methoden Java Basics - Anfänger-Themen 5
N generische HashMap und Iterator Java Basics - Anfänger-Themen 2
H generische Bausteine, heterogene Datenstrukturen Java Basics - Anfänger-Themen 2
J generische klassen neue Instanz Java Basics - Anfänger-Themen 5
H Generische Klassen. Java Basics - Anfänger-Themen 16
C Parameter in verschiedenen Anzahl und Typen Java Basics - Anfänger-Themen 6
Henri Problem von Typen Java Basics - Anfänger-Themen 7
A Literale für primitive Daten Typen Java Basics - Anfänger-Themen 4
N Enum Typen, was passiert intern mit ihnen? Java Basics - Anfänger-Themen 2
L Abstrakte Typen und Schnittstellen Java Basics - Anfänger-Themen 19
BadBat Variablen Eine Variable mit 2 Typen Java Basics - Anfänger-Themen 38
P Liste sortieren verschiedener generischer Typen Java Basics - Anfänger-Themen 4
T Interface implementieren mit Abstrakten Typen? Java Basics - Anfänger-Themen 4
K Datentypen Kurzform Addition geht, Langform scheitert am Typen Java Basics - Anfänger-Themen 6
K Frage zu Referenzvariablen und deren Typen Java Basics - Anfänger-Themen 6
C Typen aus List<Object[]> ändern Java Basics - Anfänger-Themen 7
D Klassen Feste und veränderbare Typen in Hierarchien Java Basics - Anfänger-Themen 5
B Elementare Typen und Referenztypen Java Basics - Anfänger-Themen 6
S Collections Aus Set<Object> bestimmte Typen entfernen Java Basics - Anfänger-Themen 3
B dynamische/statische Typen Java Basics - Anfänger-Themen 2
H Felder mit unterschiedl. Typen sortieren Java Basics - Anfänger-Themen 5
T genericsdeklaration - Typen einschränken Java Basics - Anfänger-Themen 17
alderwaran überladene methoden mit allen möglichen typen aufrufen Java Basics - Anfänger-Themen 3
F Datentypen Zuweisungsproblem bei parametrisierten Typen mit/ohne Wildcards Java Basics - Anfänger-Themen 3
X eigener Mergesort auf generischen Typen mit Comparator Java Basics - Anfänger-Themen 6
D Datentypen mehrdimensionales Array meherer Typen möglich ? Java Basics - Anfänger-Themen 6
R Array eines neuen Typen erstellen und befüllen Java Basics - Anfänger-Themen 2
T mit Typen Date rechnen Java Basics - Anfänger-Themen 6
G Mehrere Typen in einer Datei Java Basics - Anfänger-Themen 5
T Vergleich von generischen Typen Java Basics - Anfänger-Themen 2
M List mit typen füllen Java Basics - Anfänger-Themen 5
J Datei aus unterschiedlichen Typen auslesen Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben