избегать instanceof в Java
На каком-то этапе в университете мне сказали (а потом прочитали в четырнадцати местах), чтоinstanceof
следует использовать только какКрайнее средство', Имея это в виду, любой может сказать, является ли следующий код, который у меня есть, последним средством. Я посмотрел вокруг на переполнение стека, но не могу найти похожий сценарий - возможно, я пропустил его?
private void allocateUITweenManager() {
for(GameObject go:mGameObjects){
if (go instanceof GameGroup) ((GameGroup) go).setUITweenManager(mUITweenManager);
}
}
где
mGameObjects
это массив, только некоторые из которыхGameGroup
типGameGroup
является подклассом абстрактного класса.GameObject
GameGroup
использует интерфейсUITweenable
у которого есть методsetUITweenManager()
GameObject
не использует интерфейсUITweenable
Я полагаю, что мог бы в равной степени (и, вероятно, должен) заменитьGameGroup
в моем коде выше сUITweenable
- Я бы задавал тот же вопрос.
Есть ли другой способ сделать это, чтобы избежатьinstanceof
? Этот код не может потерпеть неудачу, как таковой (я думаю, верно?), Но, учитывая плохую прессуinstanceof
кажется, получил, я совершил какой-то кардинальный грех ООП где-то вдоль линии, которая заставляет меня использоватьinstanceof
Вот?
Заранее спасибо!