Tipo de retorno de métodos genéricos de Java
generics methods (5)
Me pregunto por qué los métodos genéricos que no devuelven nada son declarados (o pueden ser) declarados de esta manera:
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 del objeto devuelto, pero el método no devuelve nada en realidad. Entonces, ¿cuál es el significado real de <E>
en este caso específicamente y en los métodos genéricos en general?
Esta pregunta se adapta a una de mis viejas notas. Espero que esta ilustración ayude:
La <E> se llama un parámetro de tipo formal. No es el tipo de retorno del método. Básicamente dice que el método puede aceptar como matrices de parámetros de diferentes tipos (E [] inputArray).
La <E>
es la declaración del parámetro de tipo genérico. Significa que "este método tiene un único parámetro de tipo, llamado E
, que puede ser de cualquier tipo".
No es el tipo de retorno, que viene después de la declaración del parámetro de tipo, justo antes del nombre del método. Por lo tanto, el tipo de printArray
método printArray
en su pregunta todavía es void
.
Consulte la sección 8.4 de JLS para obtener más detalles sobre las declaraciones de métodos.
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.
E se usa como un marcador de posición para el tipo real que se pasará a la función Gen cuando esta función llamará.
Supongamos que E puede ser reemplazado por un entero