и кода-то меньше не станет. Добавь ко второму варианту
Map<Class, Function> map = new HashMap<>();
map.put(A.class, (args) -> ...))
map.put(B.class, (args) -> ...))
map.put(C.class, (args) -> ...))
map.put(D.class, (args) -> ...))
map.put(E.class, (args) -> ...))
map.put(F.class, (args) -> ...))
map.put(G.class, (args) -> ...))
(ну или список из Pair<Class, Function>, без разницы)
И это хорошо если у тебя аргументы совпадат, иначе сделаешь годобджект Context в котором будет куча мусора. Нафига такое плодить?
Вариант с вот этим Map полезен в случае, когда новые типы приходится время от времени добавлять/убирать/менять. Просто поправил одну строку здесь, и всё. Если же типов, как в изначальном примере, ровно три, то не вижу смысла вообще изобретать что-то: написать подряд три if и забыть.
Если аргументы не совпадают, то никакого простого решения я тоже не вижу - придётся городить мутный огород, да.
Обсуждают сегодня