Вам необходимо отправить по типу поля. Есть несколько способов сделать это:
Используйте операторы if, которые явно проверяют класс.
Сделайте так, чтобы все поля реализовывали интерфейс, реализуйте этот интерфейс соответствующим образом для каждого типа поля, а затем вызовите интерфейс.
Используйте карту, чтобы найти соответствующее действие для класса.
Вариант 1 - это то, что вы делаете сейчас; 2 - это то, что упоминает Стробоскоп; 3 называется паттерном стратегии по rsp. 1, как видите, немного беспорядок. 2 соединяет работу вышеописанного метода с полями, а 3 - нет. Какой из них (2 или 3) выбрать, зависит от вашего конкретного случая. Преимущество (2) состоит в том, что вы не забываете писать код для каждого нового поля (потому что вы получите ошибку компилятора, если забудете). Преимущество (3) состоит в том, что если вы хотите делать подобные вещи много раз, поля могут быть загромождены. Кроме того, (2) требуется, чтобы у вас был доступ к коду полей.
Стоит отметить, что если вы использовали Scala, а не Java, некоторые из проблем с (2) были бы устранены с чертами (и что он также имеет более хороший синтаксис для (1) с сопоставлением с образцом).
лично я бы предпочел (2), если возможно - возможно, реализовать это с делегированием. Единственное реальное преимущество (3) перед (1) состоит в том, что код более аккуратен - и есть немного дополнительной безопасности типов.