En 

main

 (líneas 20 a 28), en la línea 23 se hace una llamada a 

maximo

 con  los enteros 

3

,

4

 y 

5

. Cuando el 

compilador encuentra esta llamada, primero busca un método 

maximo

 que reciba tres argumentos de tipo 

int

.

No hay un método así, por lo cual el compilador busca un método genérico que pueda utilizarse, y encuentra el 
método genérico 

maximo

. Sin embargo, recuerde que los argumentos para un método genérico deben ser de un 

tipo de referencia. Por lo tanto, el compilador realiza la conversión autoboxing de los tres valores 

int

 en objetos 

Integer

, y especifi ca que estos tres objetos 

Integer

 se pasen a 

maximo

. Observe que la clase 

Integer

 (paquete 

java.lang

) implementa a la interfaz 

Comparable< Integer >

 de tal forma que el método 

compareTo

 compara 

los valores 

int

 en dos objetos 

Integer

. Por lo tanto, los objetos 

Integer

 son argumentos válidos para el método 

maximo

. Cuando se devuelve el objeto 

Integer

que representa el máximo, tratamos de mostrarlo en pantalla con 

el especifi cador de formato 

%d

, el cual muestra un valor del tipo primitivo 

int

. Así, el valor de retorno de 

maximo

se muestra en pantalla como un valor 

int

.

Hay un proceso similar que ocurre para los tres argumentos 

double

 que se pasan a 

maximo

 en la línea 25. Se 

realiza una conversión autoboxing en cada valor 

double

 para convertirlo en un objeto 

Double

 y pasarlo a 

maximo

.

De nuevo, esto se permite ya que la clase 

Double

 (paquete 

java.lang

) implementa a la interfaz 

Comparable<

Double >

. El objeto 

Double

 devuelto por 

maximo

 se imprime en pantalla con el especifi cador de formato 

%.1f,

el cual muestra un valor del tipo primitivo 

double

. Así, se realiza una conversión autounboxing en el valor de 

retorno de 

maximo

 y se muestra en pantalla como un 

double

. La llamada a 

maximo

 en la línea 27 recibe tres obje-

tos

String

, que también son objetos 

Comparable< String >

. Observe que colocamos de manera intencional 

el valor más grande en una posición distinta en cada llamada al método (líneas 23, 25 y 27), para mostrar que el 
método genérico siempre encuentra el valor máximo, sin importar su posición en la lista de argumentos.

Cuando el compilador traduce el método genérico 

maximo

 en códigos byte de Java, utiliza el borrado (pre-

sentado en la sección 18.3) para reemplazar los parámetros de tipo con tipos reales. En la fi gura 18.3, todos los 
tipos genéricos se reemplazaron con el tipo 

Object

. En realidad, todos los parámetros de tipo se reemplazan con 

el límite superior del parámetro de tipo; a menos que se especifi que lo contrario, 

Object

 es el límite superior 

predeterminado. El límite superior de un parámetro de tipo se especifi ca en la sección de parámetros de tipo. 
Para indicar el límite superior, coloque después del nombre del parámetro de tipo la palabra clave 

extends

 y el 

nombre de la clase o interfaz que representa el límite superior. En la sección de parámetros de tipo del método 

maximo

 (fi gura 18.5), especifi camos el límite superior como el tipo 

Comparable< T >

. Por ende, sólo pueden 

pasarse objetos 

Comparable< T >

 como argumentos para 

maximo

; cualquier cosa que no sea 

Comparable< T > 

producirá errores de compilación. La fi gura 18.6 simula el borrado de los tipos del método máximo, al mostrar 
el código fuente del método después de eliminar la sección de parámetros de tipo, y después de que se reemplaza 

Figura 18.6

  |  El método genérico 

maximo

, después de que el compilador realiza el borrado.

 1 

public static

 Comparable maximo(Comparable x, Comparable y, Comparable z)

 2 

{

 3  

Comparable max = x;

 // suponga que al principio x es el más grande

4

 5  

if

 ( y.compareTo( max ) > 

0

 )

 6   

max = y; 

// y es el mayor hasta ahora

7

 8  

if

 ( z.compareTo( max ) > 

0

 )

 9   

max = z; 

// z es el mayor

10

 11  

return

 max;

 // devuelve el objeto más grande

12

}

// fin del método maximo

18.4 Cuestiones adicionales sobre la traducción en tiempo de compilación: métodos que utilizan... 

769

Figura 18.5 

 |  El método genérico 

maximo

, con un límite superior en su parámetro de tipo. (Parte 2 de 2).

Maximo de 3, 4 y 5 es 5

Maximo de 6.6, 8.8 y 7.7 es 8.8

Maximo de pera, manzana y naranja es pera

18_MAQ_CAP_18_DEITEL.indd769

4/19/081:30:44AM