2012-07-07 14 views
16

Me pregunto por qué genérica métodos que nada void son (o pueden ser) declaró esta forma de devolución:Tipo de retorno de Java métodos genéricos

public static <E> void printArray(E[] inputArray) { 
    // Display array elements    
    for (E element : inputArray){   
     System.out.printf("%s ", element); 
    } 
    System.out.println(); 
    } 

Parece que <E> es el tipo de objeto devuelto, pero el método no devuelve nada de hecho. Entonces, ¿cuál es el verdadero significado de <E> en este caso específicamente y en general los métodos genéricos?

Respuesta

66

Esta pregunta se adapte a una de mis viejas notas. Espero que esto ayuda a la ilustración:

enter image description here enter image description here

+7

usted ha hecho un buen trabajo real aquí, 1 – CloudyMarble

+0

feliz escuchar eso! Gracias. @twomore – Jops

+1

gran respuesta + 1, vale la pena mencionar que en su primer método puede usar Void ('V' mayúscula) para el tipo de retorno T ... aunque 'y' tendría que tener un valor nulo – Rhubarb

3

No es el tipo del objeto devuelto. Indica que E, en la firma del método, es un tipo genérico y no un tipo concreto. Sin él, el compilador buscaría una clase llamada E para el argumento del método.

7

El <E> es la declaración de parámetro de tipo genérico. Significa que "este método tiene un parámetro de tipo único, llamado E, que puede ser de cualquier tipo".

No es el tipo de devolución - que viene después de la declaración de parámetro de tipo, justo antes del nombre del método. Entonces, el tipo de devolución del método printArray en su pregunta sigue siendo void.

Consulte section 8.4 of the JLS para obtener más detalles sobre las declaraciones de métodos.

2

El < E> se denomina parámetro de tipo formal. No es el tipo de devolución del método. Básicamente dice que el método puede aceptar como parámetros matrices de diferentes tipos (E [] inputArray).

1

E se utiliza como marcador de posición para el tipo real que se transferirá a la función Gen cuando llame a esta función.

suponer E puede ser reemplazado por número entero

Cuestiones relacionadas