Generics - Typ zurückbekommen

Bitte aktiviere JavaScript!
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:
    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
 
A

Anzeige


Vielleicht hilft dir dieser Kurs hier weiter: (hier klicken)
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:
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:
@werdas34 Du musst bei solchen Dingen zwischen Instanzen, Werten und Typen genauer unterscheiden.

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

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

Nur bei der getDisease-Methode frage ich mich, was ist der Rückgabetyp? Ist es die Art der Krankheit also T oder String?
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.

Und vorallem wie komme ich da ran?
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.
 
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.
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.
 
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.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben