Метод, принимающий два разных типа в качестве параметра

Я пишу метод, который должен принимать в качестве своего параметра объект одного из двух типов, которые не разделяют родительский тип, кроме Object. Например, это сны и чеснок. Вы можете сделать обаdreams.crush() а такжеgarlic.crush(), Я хочу иметь методutterlyDestroy(parameter), что бы принять в качестве параметра и Dreams, и Garlic.

utterlyDestroy(parameter) {
    parameter.crush()
}

И чеснок, и сны являются частью какой-то библиотеки, поэтому им нужно реализовать интерфейс ICrushable (чтобы я мог написатьutterlyDestroy(ICrushable parameter) ) не вариант.

Тело моего метода довольно длинное, поэтому его перегрузка означала бы дублирование кода. Некрасиво. Я уверен, что мог бы использовать отражение и сделать некоторый взлом класса. Некрасиво.

Я пытался использовать дженерики, но, видимо, я не могу написать что-то вроде

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

Можно ли типизировать чеснок в мечты?

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

Это все равно будет ужасно. Какие у меня есть другие варианты и какой метод борьбы с ситуацией является предпочтительным?

Ответы на вопрос(8)

Ваш ответ на вопрос