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

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

utterlyDestroy(parameter) {
    parameter.crush()
}

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

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

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

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

Можно ли преобразовать Garlic в Dreams?

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

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

27
задан JohnEye 19 March 2013 в 00:49
поделиться