Java-Standardparameter mit Methodenüberladung

1. Übersicht

In diesem kurzen Tutorial zeigen wir die Verwendung der Methodenüberladung, um Standardparameter in Java zu simulieren.

Hier sagen wir simulieren, da die Java-Spezifikation im Gegensatz zu bestimmten anderen OOP-Sprachen (wie C ++ und Scala) die Zuweisung eines Standardwerts zu einem Methodenparameter nicht unterstützt .

2. Beispiel

Lassen Sie uns zum Beispiel Tee machen! Zuerst brauchen wir einen Tee 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 } 

Hier ist der Name ein Pflichtfeld, da unser Tee mindestens einen Namen haben muss.

Dann kann es keinen Tee ohne Teepulver geben. Wir gehen also davon aus, dass der Benutzer ein Standard-1-EL- Teepulver in seinem Tee haben möchte , wenn es zum Zeitpunkt des Aufrufs nicht bereitgestellt wird. Dies ist dann unser erster Standardparameter .

Die anderen optionalen Parameter sind Milch (in ml), Kräuter (hinzufügen oder nicht hinzufügen) und Zucker (in EL). Wenn einer ihrer Werte nicht angegeben wird, gehen wir davon aus, dass der Benutzer sie nicht möchte.

Mal sehen, wie dies in Java durch Methodenüberladung erreicht wird :

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

Wie offensichtlich ist, verwenden wir hier die Konstruktorkettung, eine Form der Überladung, um den Methodenparametern einige Standardwerte bereitzustellen.

Fügen wir nun einen einfachen Test hinzu, um dies in Aktion zu sehen:

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

Es gibt andere Möglichkeiten, eine Standardparametersimulation in Java zu erreichen. Einige von ihnen sind:

  • mit Builder-Muster
  • mit Optional
  • Zulassen von Nullen als Methodenargumente

In unserem Beispiel können wir die dritte Möglichkeit nutzen, Nullargumente zuzulassen:

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

In diesem Artikel haben wir uns mit der Methodenüberladung befasst, um Standardparameter in Java zu simulieren.

Während es andere Möglichkeiten gibt, dasselbe zu erreichen, ist das Überladen am saubersten und einfachsten. Wie immer ist Code auf GitHub verfügbar.