Metoda akceptująca dwa różne typy jako parametr

Piszę metodę, która powinna przyjmować jako parametr obiekt jednego z dwóch typów, które nie współdzielą typu nadrzędnego innego niż Object. Na przykład typy to Dreams and Garlic. Możesz zrobić obadreams.crush() igarlic.crush(). Chcę mieć metodęutterlyDestroy(parameter), który zaakceptowałby jako parametr zarówno Dreams, jak i Garlic.

utterlyDestroy(parameter) {
    parameter.crush()
}

Zarówno czosnek, jak i sny są częścią jakiejś biblioteki, więc wprowadzenie ich do interfejsu ICrushable (tak, żebym mógł pisać)utterlyDestroy(ICrushable parameter) ) nie jest opcją.

Moja metoda jest dość długa, więc przeładowanie oznaczałoby powielenie kodu. Brzydki. Jestem pewien, że mógłbym użyć refleksji i zrobić trochę hakowania klasowego. Brzydki.

Próbowałem użyć generics, ale najwyraźniej nie mogę napisać czegoś takiego

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

Czy możliwe jest wpisanie czosnku w marzenia?

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

To jednak nadal byłoby brzydkie. Jakie są moje inne opcje i jaka jest preferowana metoda radzenia sobie z sytuacją?

questionAnswers(8)

yourAnswerToTheQuestion