Я пишу метод, который должен принимать в качестве своего параметра объект одного из двух типов, которые не разделяют родительский тип, отличный от Object. Например, типы - это Мечты и Чеснок. Вы можете сделать как dreams.crush()
, так и garlic.crush()
. Я хочу иметь метод utterlyDestroy(parameter)
, который будет принимать в качестве параметра как Dreams, так и Garlic.
utterlyDestroy(parameter) {
parameter.crush()
}
Оба чеснока и сны являются частью некоторой библиотеки, поэтому, если они реализуют интерфейс ICrushable (чтобы я мог писать utterlyDestroy(ICrushable parameter)
), это не вариант.
Тело моего метода довольно длинное, поэтому перегрузка будет означать дублирование кода. Некрасиво. Я уверен, что смогу использовать рефлексию и немного взломать класс. Некрасиво.
Я пробовал использовать generics, но, видимо, я не могу написать что-то вроде
utterlyDestroy(<T instanceof Dreams || T instanceof Garlic> parameter)
Можно ли вывести Чеснок в мечты?
utterlyDestroy(Object parameter) {
((Dreams)parameter).crush()
}
Это все равно было бы уродливо. Каковы мои другие варианты и каков предпочтительный метод решения этой проблемы?