Permitir parámetros ilimitados en la definición de un método [JAVA]

definir métodos o funciones que admitan tantos parámetros como necesitemosÚltimamente ando experimentando con mi lenguaje de programación favorito y estoy muy contento con algunos de los diseños que estoy adoptando; aunque no suelo publicar artículos de desarrollo en el blog (de Eclipse y SVN sí pero de programar en Java nada de nada) he optado por compartir éste para, si consideráis que seguís con ganas de más (ruegos y amenazas en los comentarios ;)), pasar a escribir otros más avanzados que tomarán como base lo que aquí vamos a ver.

Puede que el definir métodos con un número indefinido de parámetros os resulte trivial pero, a pesar de que llevo bastante tiempo utilizando Java, no había caído que fuese posible hacerlo y me ha llamado tanto la atención lo torpe que puedo llegar a ser que se me ha ocurrido alguna que otra forma de sacarle partido.

Pero dejemos las aplicaciones para futuros artículos (salvo que indiquéis lo contrario en los comentarios, amenazo con escribir algún artículo que otro sobre el tema) y vamos al grano…

Debí sospecharlo

Y es que, el que más y el que menos ha utilizado el método format(..) de String, ¿¡¿verdad?!? (no me digas que eres de los que se ponen a concatenar cadenas “a lo loco” ;P)

String.format("Hoy %s me siento %s","martes","bien");
String.format("Pero ayer %s me sentía %s y %s","lunes","triste","abatido");

¿Cómo es que no me llamó la atención poder utilizarlo con 2, 3 o n-cientos parámetros?

Supongo porque cuando corremos para dar solución al problema que nos plantean dejamos de fijarnos en los pequeños detalles que, en muchas ocasiones, son los que marcan la diferencia.

Si nos fijamos en la signatura del método String.format(..) observamos lo siguiente

cómo obtener la sintaxis de un método en eclipse

¿Qué son esos puntos suspensivos tras el tipo Object?

¿Mero azúcar sintáctico del lenguaje?

Aclarando el “misterio”

Pues resulta que los puntos suspensivos son la respuesta al varargs de otros lenguajes de programación y fue incluido en  la versión 6 de Java.

Son equivalentes a definir el parámetro como un array del tipo que le indiquemos (da igual que sea primitivo o una clase definida por el usuario) pero sin tener que crearlo explícitamente en la invocación al método

  • enteros (int) public void suma (int… valores) {…}
  • clase Cliente public void facturar(Cliente… ){…}

La gracia de hacerlo como tipo objetos (Object…) es que podremos mezclar parámetros de todos los tipos que nos apetezca siendo la máquina virtual de java la encargada de hacer la conversión adecuada (autoboxing)


public void miMetodo(Object... p) {...}
...
miMetodo("Martes",17.25, new Cliente("00000000T","José Antonio"));

Conclusión

Modo de definir en Java un número indefinido de parámetros que espero llame la atención a alguno de vosotros.

Retomando la pregunta que dejé en el aire al principio, ¿os parece que publique algún otro artículo de programación en el blog o seguimos con nuestro Linux y el Software Libre?

No vale que alguien proponga que cree un blog de Java y los publique allí que

  1. para eso ya está JavaHispano
  2. no tengo tiempo ni de publicar en éste tanto como me gustaría (como para abrir otro blog que “alimentar” ;))

16 comentarios en “Permitir parámetros ilimitados en la definición de un método [JAVA]

      • Carlos dijo:

        Será una tontería, pero si pones un código y luego una muestra de la salida se verá el efecto que la combinación de los diferentes tipos de parámetros que introdujiste en tu función.

        por ejemplo que el código imprima cada parámetro que le has pasado o vete a saber. 😉

        Lo digo por la gente que no sabe java o que está iniciándose 8aunque tu post no vaya encaminado a ser un tutorial de java).

        Un saludo y felicidades por tu labor.

        • No es ninguna tontería… estuve tentado de meter capturas de pantalla pero lo desestimé en aras de la claridad (tiendo a escribir demasiado y quería centrarme en el procedimiento)

          Buscaré hueco y le meteré un par de imágenes.

          Gracias por la sugerencias, Carlos.

  1. Pingback: BlogESfera.com

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s