Methode, die zwei verschiedene Typen als Parameter akzeptiert

Ich schreibe eine Methode, die als Parameter ein Objekt eines von zwei Typen annehmen soll, die keinen anderen übergeordneten Typ als Object gemeinsam haben. Die Typen sind beispielsweise Träume und Knoblauch. Sie können beides tundreams.crush() undgarlic.crush(). Ich möchte eine Methode habenutterlyDestroy(parameter), das würde sowohl Träume als auch Knoblauch als Parameter akzeptieren.

utterlyDestroy(parameter) {
    parameter.crush()
}

Sowohl Knoblauch als auch Träume sind Teil einer Bibliothek, so dass sie eine Schnittstelle ICrushable implementieren (damit ich schreiben kann)utterlyDestroy(ICrushable parameter) ) ist keine Option.

Mein Methodenkörper ist ziemlich lang, so dass eine Überladung das Duplizieren von Code bedeuten würde. Hässlich. Ich bin mir sicher, ich könnte Reflexion gebrauchen und ein bisschen Hacking machen. Hässlich.

Ich habe versucht, Generika zu verwenden, aber anscheinend kann ich so etwas nicht schreiben

utterlyDestroy(<T instanceof Dreams || T instanceof Garlic> parameter)

Ist es möglich, Knoblauch in Träume zu tippen?

utterlyDestroy(Object parameter) {
    ((Dreams)parameter).crush()
}

Das wäre aber immer noch hässlich. Was sind meine anderen Möglichkeiten und wie gehe ich bevorzugt mit der Situation um?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage