Вместо передачи объекта рассмотрите возможность передачи объекта-обертки над соответствующим типом (String, List, Map и т. Д.); например, ExceptionData, которая выполняет договор о реализации метода isEmpty
. Эти данные исключения будут иметь подклассы, которые при необходимости переопределяют метод isEmpty
.
Конечно, это может привести к созданию еще нескольких классов и нескольких объектов, созданных во время выполнения, но если вы не имеете дело с миллионом таких сущностей, этот подход выглядит гораздо чище / явно.
Если этот уровень подробности недопустим, рассмотрите возможность перегрузки метода для выполнения ваших ставок, что приводит к более чистому клиентскому коду и не создает дополнительных объектов.