Это не способ делать вещи объектно-ориентированным способом, это возврат к старому дихотомии кода / данных. Теперь это не обязательно плохо (если вы знаете, что делаете), но это следует оставить необъектно-ориентированным языкам вроде C.
При правильном дизайне вам не нужно такого поведения. Вместо конструкции:
if (obj.getClass().isInstance(Statement.class)) {
doStuffWithStatements((Statement) obj));
}
(извиняюсь перед Бенджисмитом за «кражу» его кода), вы действительно должны сделать сам объект ответственным за свою собственную деятельность таким образом:
obj.doStuff();
Тогда каждый отдельный класс obj
будет иметь собственное определение для doStuff
. Это правильный способ сделать это.