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ą?