Generics - Typ zurückbekommen

Diskutiere Generics - Typ zurückbekommen im Java Basics - Anfänger-Themen Forum; Hallo, wir arbeiten zurseit mit Generics. Ich habe eine Klasse Patient<T extends Disease>. T ist die Krankheit, die der Patient angibt. Dazu soll...

  1. werdas34
    werdas34 Mitglied
    Hallo,

    wir arbeiten zurseit mit Generics.
    Ich habe eine Klasse Patient<T extends Disease>. T ist die Krankheit, die der Patient angibt.
    Dazu soll ich zwei Methoden schreiben:
    sicken(T disease)
    Diese Methode lässt einen Patienten an der Krankheit T erkranken. Sie gibt den Patienten als Ergebnis zurück.
    getDisease()
    Ein Getter für die Krankheit des Patienten.

    Die sicken-Methode habe ich bereits.
    Nur bei der getDisease-Methode frage ich mich, was ist der Rückgabetyp? Ist es die Art der Krankheit also T oder String? Und vorallem wie komme ich da ran?
    Code (Text):
        public String getDisease() {
            return this.getClass().getTypeName();
        }
    Wenn ich es so schreibe kommt Patient raus, ist aber nicht die Krankheit.
    Also wie muss das aussehen?

    thx
    mfg werdas34
     
  2. Vielleicht hilft dir dieses Buch hier weiter.
  3. httpdigest
    httpdigest Bekanntes Mitglied
    Die Klasse Patient wird ja sicherlich eine Instanzvariable `disease` vom Typ `T` haben, um sich die Krankheit zu merken innerhalb von sicken(T disease). `sicken` wäre dann ja nichts anderes als ein Setter für eben diese Instanzvariable.
    Dann gibst du bei getDisease() halt einfach die Instanzvariable zurück.

    EDIT: Also so in etwa:
    Code (Java):
    public class Patient<T extends Disease> {
      private T disease;
      public Patient<T> sicken(T disease) {
        this.disease = disease;
        return this;
      }
      public T getDisease() {
        return disease;
      }
    }
     
    Zuletzt bearbeitet: 6. Jan. 2019
  4. mihe7
    mihe7 Bekanntes Mitglied
    @werdas34 Du musst bei solchen Dingen zwischen Instanzen, Werten und Typen genauer unterscheiden.

    Nö. T ist der Typ der Krankheit, an der ein Patient leiden kann (daran sieht man schon, wie geistreich dieses Modell ist...)

    Nein, die Methode lässt einen Patienten an der Krankheit disease erkranken. Die Krankheit disease ist eine Instanz vom Typ T.

    Hier hast Du zum Teil die richtige Frage gestellt: bzgl. des Rückgabetyps ist die Frage nach der "Art der Krankheit also T" völlig korrekt.

    Hier verwechselst Du Typ und Wert. Die Methode gibt die Krankheit zurück, an der der Patient leidet und die Krankheit ist (eine Instanz) vom Typ T.
     
  5. Neumi5694
    Neumi5694 Mitglied
    Generics ersparen dir im Grunde nur Schreibarbeit. Anstatt mit Generics könntest du genauso gut mit Object und mit Casts arbiten.
    Dessen sind sich auch die Entwickler bei Oracle bewusst. Die Ursprungsklasse steht in einer generischen Methode nicht zur Verfügung.
    Das hier ist eine Workaround, wie er des öfteren in Java-Klassen zur Anwendung kommt.
    Code (Java):
        class AbstractClass {
    //...
        }

        public <T extends AbstractClass> doSomething(T value, Class<T> theClass) {
    /...
        }
     
    Das geht natürlich auch bei Konstruktoren usw (schau dir mal EnumMap an).
    theClass entspricht dabei der Klasse von value (Java Generics verhindert, dass du was anderes übergibst).
    Das wird z.B. gebraucht, um im Konstruktor von EnumMap und EnumSet auf theClass.values() zuzugreifen.
     
  6. Neumi5694
    Neumi5694 Mitglied
    Hmmm, mit dem Beispiel bin ich etwas über's Ziel hinausgeschossen, sorry.
    Class<T> wird natürlich nur dann gebraucht, wenn value gar nicht als Wert übergeben wird. Aber genau in dem Fall kann man's dann verwenden.
    Das kann auch sinnvoll sein, wenn man eine Liste von Values übergibt.
     
  7. Wenn du Java lernen möchtest, empfehlen wir dir dieses Buch hier
Passende Stellenanzeigen aus deiner Region:





Die Seite wird geladen...

Generics - Typ zurückbekommen - Ähnliche Themen

Generics von Profis leicht erklärt
Generics von Profis leicht erklärt im Forum Java Basics - Anfänger-Themen
Mit Generics arbeiten - Übungsaufgabe
Mit Generics arbeiten - Übungsaufgabe im Forum Allgemeine Java-Themen
Warum funktioniert 'instanceof' bei generics nicht?
Warum funktioniert 'instanceof' bei generics nicht? im Forum Java Basics - Anfänger-Themen
Factory Pattern: Mit Generics umgehen
Factory Pattern: Mit Generics umgehen im Forum Allgemeine Java-Themen
Generics: Typ wird nicht erkannt
Generics: Typ wird nicht erkannt im Forum Java Basics - Anfänger-Themen
Thema: Generics - Typ zurückbekommen