У меня есть следующий метод:Исключая условный оператор с InstanceOf проверяет
@Override
public <T> T method(T object){
if(object instanceOf Type1){
...
}
elseif(object instanceOf Type2){
...
}
...
}
object
всегда типа SuperType
и Type1
, Type2
, ... являются все подтипы SuperType
. У меня нет доступа к любым типам SuperType
, Type1
и т. Д., Поэтому я не могу их изменить.
Я хотел бы устранить эту структуру, у которой есть много if
-s и instanceOf
чеков. Я попытался реализовать шаблон Visitor для этой цели, но он не работал, так как я не могу изменить ни один из упомянутых выше типов.
Кто-нибудь знает хорошее решение для этого примера? Спасибо!
Не следует избегать 'instanceof', но если' object' всегда имеет тип 'SuperType', вы должны, вероятно, объявить' '. –
Thilo
Метод - это переопределенная версия типа, к которому у меня нет доступа, подпись метода должна оставаться неизменной. –
Ссылки по теме: http://stackoverflow.com/questions/16665898/when-if-else-instance-of-are-inevitable-how-do-we-improve-the-design-apart?rq=1 – Thilo