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