PruebaTipoCrudo.java:20: warning: unchecked assignment
found : Pila
required: Pila<java.lang.Integer>
Pila< Integer > pilaInteger = new Pila( 10 );
^
PruebaTipoCrudo.java:22: warning: [unchecked] unchecked method invocation:
<T>probarPush(java.lang.String,Pila<T>,T[]) in PruebaTipoCrudo is applied to
(java.lang.String,Pila,java.lang.Double[])
probarPush( “pilaTipoCrudo1”, pilaTipoCrudo1, elementosDouble );
^
PruebaTipoCrudo.java:23: warning: [unchecked] unchecked method invocation:
<T>probarPop(java.lang.String,Pila<T>) in PruebaTipoCrudo is applied to (
java.lang.String,Pila)
probarPop( “pilaTipoCrudo1”, pilaTipoCrudo1 );
^
PruebaTipoCrudo.java:24: warning: [unchecked] unchecked method invocation:
<T>probarPush(java.lang.String,Pila<T>,T[]) in PruebaTipoCrudo is applied to
(java.lang.String,Pila,java.lang.Double[])
probarPush( “pilaTipoCrudo2”, pilaTipoCrudo2, elementosDouble );
^
PruebaTipoCrudo.java:25: warning: [unchecked] unchecked method invocation:
<T>probarPop(java.lang.String,Pila<T>) in PruebaTipoCrudo is applied to
(java.lang.String,Pila)
probarPop( “pilaTipoCrudo2”, pilaTipoCrudo2 );
^
5 warnings
Figura 18.13
| Mensajes de advertencia del compilador.
generan advertencias debido a que el método
probarPop
espera como argumento una
Pila
para la cual se haya
especifi cado un argumento de tipo. Sin embargo, en cada llamada a
probarPop
, pasamos una variable
Pila
de
tipo crudo. Por ende, el compilador indica una advertencia, debido a que no puede comprobar los tipos utilizados
en el cuerpo del método.
18.8 Comodines en métodos que aceptan parámetros de tipo
En esta sección presentaremos un poderoso concepto de los genéricos, conocido como los
comodines
. Para este
fi n, también introduciremos una nueva estructura de datos del paquete
java.util
. El capítulo 19, Colecciones,
habla sobre el Marco de trabajo Collections de Java, el cual proporciona muchas estructuras de datos genéricas y
algoritmos que manipulan a los elementos de estas estructuras de datos. Tal vez la más simple de estas estructuras
de datos sea la clase
ArrayList
: una estructura de datos tipo arreglo, que puede cambiar su tamaño en forma
dinámica. Como parte de esta discusión, aprenderá a crear un objeto
ArrayList
, a añadirle elementos y a recorrer
esos elementos mediante el uso de una instrucción
for
mejorada.
Antes de presentar los comodines, analicemos un ejemplo que nos ayude a motivar su uso. Suponga que desea
implementar un método genérico llamado
suma
, que obtenga el total de números en una colección, como en un
objeto
ArrayList
. Para empezar, podría insertar los números en la colección. Como sabe, las clases genéricas sólo
se pueden utilizar con tipos de clases o de interfaces. Por lo tanto, se realizaría una conversión autoboxing de los
números a objetos de las clases de envoltura de tipos. Por ejemplo, cualquier valor
int
se convertiría mediante
autoboxing en un objeto
Integer
, y cualquier valor
double
se convertiría mediante autoboxing en un objeto
Double
. Nos gustaría poder obtener el total de todos los números en el objeto
ArrayList
, sin importar su tipo.
Por esta razón, declaramos el objeto
ArrayList
con el argumento de tipo
Number
, el cual es la superclase tanto
de
Integer
como de
Double
. Además, el método
suma
recibirá un parámetro de tipo
ArrayList< Number >
y obtendrá el total de sus elementos. En la fi gura 18.14 se demuestra cómo obtener el total de los elementos de
un objeto
ArrayList
de objetos
Number
.
En la línea 11 se declara e inicializa un arreglo de objetos
Number
. Como los inicializadores son valores
primitivos, Java realiza conversiones autoboxing en cada valor primitivo, para convertirlo en un objeto de su
correspondiente tipo de envoltura. Los valores
int 1
y
3
se convierten mediante autoboxing en objetos
Integer
,
18.8 Comodines en métodos que aceptan parámetros de tipo
783
18_MAQ_CAP_18_DEITEL.indd783
4/19/081:30:51AM