Шаблон посетителя является предпочтительным решением, если вы хотите, чтобы один и только один экземпляр метода вызывался в соответствии с типом объекта.
Однако, если у вас есть C наследует, B наследует A, и вы хотите, чтобы ваши объектычтобы вызвать метод для их типа класса и всех унаследованных (например), вы должны использовать isAssignableFrom (...) .
Например, если ваш объект имеет тип B и вычтобы он вызывал dispatch(B obj)
и dispatch(C obj)
, вам необходимо заключить эти вызовы соответственно в:
if (A.isAssignableFrom(obj.getClass())) { dispatchA(obj); }
if (B.isAssignableFrom(obj.getClass())) { dispatchB(obj); }
if (C.isAssignableFrom(obj.getClass())) { dispatchC(obj); }
Никогда не используйте instanceof, потому что в этом случае он не будет работать.