Автор оригинала: Sampada Wagde.
1. Обзор
В этом коротком уроке мы продемонстрируем использование перегрузки методов для имитации параметров по умолчанию в Java.
Здесь мы говорим “имитировать”, потому что, в отличие от некоторых других языков ООП (таких как C++ и Scala), спецификация Java не поддерживает присвоение значения по умолчанию параметру метода .
2. Пример
Например, давайте заварим чай! Во-первых, нам понадобится Чай POJO:
public class Tea { static final int DEFAULT_TEA_POWDER = 1; private String name; private int milk; private boolean herbs; private int sugar; private int teaPowder; // standard getters }
Здесь/| имя является обязательным полем, так как наша Команда должна иметь хотя бы имя.
Тогда не может быть никакого чая без чайного порошка. Итак, мы предположим, что пользователь хочет стандартную 1 столовую ложку чайного порошка в своем чае, если это не предусмотрено во время вызова. Тогда это наш первый параметр по умолчанию .
Другими необязательными параметрами являются молоко (в мл), травы (добавлять или не добавлять) и сахар (в ст. л.). Если какие-либо из их значений не указаны, мы предполагаем, что пользователь их не хочет.
Давайте посмотрим, как достичь этого в Java с помощью перегрузки метода :
public Tea(String name, int milk, boolean herbs, int sugar, int teaPowder) { this.name = name; this.milk = milk; this.herbs = herbs; this.sugar = sugar; this.teaPowder = teaPowder; } public Tea(String name, int milk, boolean herbs, int sugar) { this(name, milk, herbs, sugar, DEFAULT_TEA_POWDER); } public Tea(String name, int milk, boolean herbs) { this(name, milk, herbs, 0); } public Tea(String name, int milk) { this(name, milk, false); } public Tea(String name) { this(name, 0); }
Как видно, здесь мы используем цепочку конструкторов, форму перегрузки, чтобы предоставить параметрам метода некоторые значения по умолчанию.
Теперь давайте добавим простой тест, чтобы увидеть это в действии:
@Test public void whenTeaWithOnlyName_thenCreateDefaultTea() { Tea blackTea = new Tea("Black Tea"); assertThat(blackTea.getName()).isEqualTo("Black Tea"); assertThat(blackTea.getMilk()).isEqualTo(0); assertThat(blackTea.isHerbs()).isFalse(); assertThat(blackTea.getSugar()).isEqualTo(0); assertThat(blackTea.getTeaPowder()).isEqualTo(Tea.DEFAULT_TEA_POWDER); }
3. Альтернативы
Существуют и другие способы моделирования параметров по умолчанию в Java. Некоторые из них:
- использование шаблона Builder
- использование Необязательно
- Разрешение нулей в качестве аргументов метода
Вот как мы можем использовать третий способ разрешения нулевых аргументов в нашем примере:
public Tea(String name, Integer milk, Boolean herbs, Integer sugar, Integer teaPowder) { this.name = name; this.milk = milk == null ? 0 : milk.intValue(); this.herbs = herbs == null ? false : herbs.booleanValue(); this.sugar = sugar == null ? 0 : sugar.intValue(); this.teaPowder = teaPowder == null ? DEFAULT_TEA_POWDER : teaPowder.intValue(); }
4. Заключение
В этой статье мы рассмотрели использование перегрузки методов для имитации параметров по умолчанию в Java.
Хотя есть и другие способы добиться того же, перегрузка является наиболее чистой и простой. Как всегда, код доступен на GitHub .