Parámetros predeterminados de Java mediante la sobrecarga de métodos

1. Información general

En este breve tutorial, demostraremos el uso de la sobrecarga de métodos para simular parámetros predeterminados en Java.

Aquí, decimos simular porque, a diferencia de otros lenguajes de programación orientada a objetos (como C ++ y Scala), la especificación de Java no admite la asignación de un valor predeterminado a un parámetro de método .

2. Ejemplo

Como ejemplo, ¡hagamos té! Primero, necesitaremos un 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 } 

Aquí, el nombre es un campo obligatorio, ya que nuestro debe tener al menos un nombre.

Entonces, no puede haber té sin té en polvo. Entonces, asumiremos que el usuario quiere una cucharada de en polvo estándar en su té, si no se proporciona en el momento de la invocación. Este es entonces nuestro primer parámetro predeterminado .

Los otros parámetros opcionales son la leche (en ml), las hierbas (para agregar o no agregar) y el azúcar (en cucharadas). Si no se proporciona alguno de sus valores, asumimos que el usuario no los quiere.

Veamos cómo lograr esto en Java usando la sobrecarga de métodos :

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

Como es evidente, aquí estamos usando el encadenamiento de constructores, una forma de sobrecarga para proporcionar los parámetros del método con algunos valores predeterminados.

Ahora agreguemos una prueba simple para ver esto en acción:

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

Hay otras formas de lograr la simulación de parámetros predeterminados en Java. Algunos de ellos son:

  • usando el patrón Builder
  • usando Opcional
  • Permitir nulos como argumentos de método

Así es como podemos hacer uso de la tercera forma de permitir argumentos nulos en nuestro ejemplo:

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. Conclusión

En este artículo, analizamos el uso de la sobrecarga de métodos para simular parámetros predeterminados en Java.

Si bien hay otras formas de lograr lo mismo, la sobrecarga es más limpia y simple. Como siempre, el código está disponible en GitHub.