Эффективная перегрузка функций множеством необязательных аргументов - PullRequest
0 голосов
/ 05 мая 2018

Сегодня я писал функцию, которая имела два обязательных аргумента и три необязательных аргумента. Поскольку использование Optional<> типов не одобряется в качестве аргументов, перегрузка функций была моим инструментом для решения этой проблемы. В итоге я получаю что-то вроде этого:

public boolean func(int a, String b)

public boolean func(int a, String b, String c)

public boolean func(int a, String b, int d)

public boolean func(int a, String b, long e)

Тогда я должен сделать различные комбинации двух аргументов ...

public boolean func(int a, String b, String c, int d)

public boolean func(int a, String b, String c, long e)

public boolean func(int a, String b, int d, long e)

и наконец "полная функция"

public boolean func(int a, String b, String c, int d, long e)

Мне кажется, это слишком много работы, и когда это происходит, я чувствую, что я делаю что-то не так. Почему я должен создавать 7 дополнительных функций вместо использования Optional или POJO в этом случае? Какой самый эффективный способ справиться с этим?

1 Ответ

0 голосов
/ 05 мая 2018

Вам абсолютно не обязательно реализовывать все комбинации необязательных параметров.

Ключевая точка зрения, которую следует учитывать при принятии решения по этому вопросу, - насколько она будет полезна для звонящего . Если у вас нет вариантов использования для поддержки и предоставления перегруженных методов, то создание этих перегруженных методов просто добавляет ненужный код, который создает ненужное бремя тестирования и обслуживания.

Если вы ищете более простой способ предоставления такой же гибкости, тогда вы можете использовать Optional:

public boolean func(int a, String b, 
   Optional<String> c, Optional<Integer> d, Optional<Long> e)

Это, вероятно, хороший компромисс, позволяющий вашему контракту быть функционально эквивалентным исходному API со многими перегруженными методами. Это позволяет вашим клиентам выбирать то, что они отправляют, и позволяет вам избежать беспорядка API. Прежде всего, это делает очевидным, что является необязательным, устраняя необходимость для вызывающих абонентов читать документацию по каждому методу.

...