Parametri predefiniti Java che utilizzano il sovraccarico del metodo

1. Panoramica

In questo breve tutorial, dimostreremo l'uso del sovraccarico del metodo per simulare i parametri predefiniti in Java.

Qui diciamo simulare perché a differenza di alcuni altri linguaggi OOP (come C ++ e Scala), la specifica Java non supporta l'assegnazione di un valore predefinito a un parametro del metodo .

2. Esempio

Ad esempio, facciamo del tè! Per prima cosa, avremo bisogno di un Tea 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 } 

Qui il nome è un campo obbligatorio, poiché il nostro deve avere almeno un nome.

Quindi, non può esserci tè senza tè in polvere. Quindi, supponiamo che l'utente desideri un tè in polvere standard da 1 cucchiaio nel proprio tè, se non viene fornito al momento dell'invocazione. Questo è quindi il nostro primo parametro predefinito .

Gli altri parametri opzionali sono latte (in ml), erbe (da aggiungere o non aggiungere) e zucchero (in cucchiai). Se uno qualsiasi dei loro valori non viene fornito, presumiamo che l'utente non li voglia.

Vediamo come ottenere ciò in Java utilizzando il sovraccarico del metodo :

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); }

Come è evidente, qui stiamo usando il concatenamento dei costruttori, una forma di sovraccarico per fornire ai parametri del metodo alcuni valori predefiniti.

Ora aggiungiamo un semplice test per vederlo in azione:

@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. Alternative

Esistono altri modi per ottenere la simulazione dei parametri predefiniti in Java. Alcuni di loro sono:

  • utilizzando il modello Builder
  • utilizzando Opzionale
  • Consentire valori nulli come argomenti del metodo

Ecco come possiamo utilizzare il terzo modo per consentire argomenti nulli nel nostro esempio:

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. Conclusione

In questo articolo, abbiamo esaminato l'utilizzo del sovraccarico del metodo per simulare i parametri predefiniti in Java.

Sebbene ci siano altri modi per ottenere lo stesso risultato, il sovraccarico è più pulito e semplice. Come sempre, il codice è disponibile su GitHub.