с типами все еще интереснее - если иерархия не была хорошо продумана заранее, то потом на каждый чих делают производные типы, где-то внутри методов их начинают кастить один в другой по совсем сторонним условиям
И потом надо сидеть смотреть какие там у них геттеры, сеттеры, как их копировать, мержить, как маппиться. А в кложе seq/мапа и всё удобно