martes, 16 de febrero de 2010

Respuestas a las interrogantes ....

Tal y como lo mencionaba en el post anterior, voy a dar respuesta a las interrogantes que deje pendientes :-) ...

En primer lugar estaba preguntando qué deberíamos hacer para poder imprimir el contenido del arreglo; bueno la respuesta pasa por considerar la siguiente variante del código:


Acá vemos que se ha considerado el argumento como un arreglo de objetos, que en este caso si nos fijamos en la línea 22 estoy haciendo uso de los argumentos variables, luego se va a entender que dentro del método el argumento "objList" se trata como un arreglo de dos elementos (y cada uno de ellos es un arreglo de String), luego los elementos de "objList" se moldean a String[], lo cual no deja de ser peligroso, porque no se sabe con certeza que van a ser arreglos de String ... ahi deberíamos tratar la posible excepción (ClassCastException) que se generaría en caso de que no se pueda convertir, suponiendo por ejemplo, que llamamos al método usando elementos del tipo Integer[] por ejemplo ... pero bueno, ese no es el tema relevante acá :-p jejeje

Finalmente, en la línea 17 se recorre el arreglo que se encuentra dentro del arreglo y recién ahí podemos acceder a los elementos como String que están dentro del arreglo ... insisto, quizás estoy tratando muy "relajadamente" el tema de la conversión ... pero sólo quería responder a la pregunta de cómo acceder a los elementos del arreglo ...

La segunda pregunta que había planteado era qué era lo que sucedía si se eliminan los [] en la recepción del argumento dentro del método printMeThat ... la respuesta acá es más o menos la que están imaginando (porque la están imaginando verdad? :-p jejeje) ahi se trata el arreglo como un objeto simple y de todas formas va a imprimir la referencia del arreglo y si agregamos el código que propuse antes el resultado sería EXACTAMENTE el mismo, es decir, imprime el contenido de los arreglos (los valores de los String que están dentro de los arreglos).

Bueno, esperando haberme explicado y agradeciendo a los que hayan leído hasta este punto, me despido

Bye

martes, 9 de febrero de 2010

Argumentos variables ...


Acá va algo relacionado con los "famosos" argumentos variables. La sintaxis que utiliza los "..." luego del tipo de datos y antes del nombre de la variable es una de las reglas de oro para trabajar con los argumentos variables. Además se debe agregar otra regla que dice relación con que el argumento variable SIEMPRE debe ser el último de la lista de argumentos de un método. Si revisamos la siguiente figura:
notamos las consideraciones e interpretaciones que se van a tener respecto del trabajo con argumentos variables en los métodos.

Ahora bien, analizando la posible respuesta a la pregunta que se plantea al prinicipio y que es el objetivo de este post :-) jejeje, puedo decir que:

Dado que dentro de las alternativas se contempla un posible error de compilación se hace necesario analizar las líneas candidatas de ser causantes de un error de compilación. En el caso de la
línea 6 no hay problema de sintaxis porque de acuerdo a las reglas ya revisadas se está definiendo un argumento variable. La línea 7 delclara y crea un arreglo declarado como Object y creado como String lo que no genera problema porque la regla dice que la forma en la cual se declara el objeto (la clase usada en la línea de declaración antes del nombre de la variable) debe ser de mayor jerarquía de la forma en la que se crea (lo que va después del operador new). Finalmente, la línea 4 no presenta problema de sintaxis dado que se está usando una manera resumida de recorrer el arreglo (que se está recibiendo como argumento); esta forma de recorrer el arreglo va dejando en el objeto "obj" los elementos que se encuentran dentro del arreglo "objList" que es considerado como 0 o más arreglos de objetos.

Dado el análisis anterior queda por ver si el programa genera alguna salida y si esa salida coincide con la expuesta en la alternativa D. En la línea 8 se realiza la llamada al método printMeThat usando el arreglo de objetos "sArray", por su parte, en la línea 3 el argumento "objList" está capacitado para recibir 0 o más arreglos de objetos por lo que los valores de la variable "obj" que se está declarando en la línea 4 son elementos del tipo Arrays de objetos y es eso lo que intenta imprimir y es por esa razón que va a imprimir la referencia del objeto (el arreglo en este caso) y no el contenido. Luego la alternativa correcta es la alternativa E.

Ahora, como siempre, vienen las inquietudes "extras" las que voy a dejar planteadas para responderlas en el siguiente post:

  • ¿Qué cambios se deben incluir para poder imprimir el contenido del arreglo?
  • ¿Qué sucede si se quitan los [] de la declaración del argumento en la línea 3?.

Pensemos un poco en eso y en el siguiente post van las respuestas ;-)

Bye