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. Java online lernen
  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 Aktives 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 Aktives 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. Java online lernen
Passende Stellenanzeigen aus deiner Region:





Die Seite wird geladen...

Generics - Typ zurückbekommen - Ähnliche Themen

Frage zu Generics und Wildcards
Frage zu Generics und Wildcards im Forum Java Basics - Anfänger-Themen
Generics und Casting eines Objekts
Generics und Casting eines Objekts im Forum Java Basics - Anfänger-Themen
Generics
Generics im Forum Java Basics - Anfänger-Themen
Vererbung/Interfaces/Generics
Vererbung/Interfaces/Generics im Forum Java Basics - Anfänger-Themen
Generics von Profis leicht erklärt
Generics von Profis leicht erklärt im Forum Java Basics - Anfänger-Themen
Thema: Generics - Typ zurückbekommen