Я пишу метод, который должен принимать в качестве параметра объект одного из двух типов, у которых нет общего родительского типа, отличного от 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()
}
Это все равно было бы уродливо. Какие у меня есть другие варианты и какой способ разрешения ситуации я предпочитаю?