2012-07-03 7 views
8

Tengo el siguiente código pero estoy confundido con todos los genéricos.Lo que está estático <T> Lista <T> methodName (Lista <? super T> entrada)

public static <T> List<T> backwards (List<? super T> input) { 
     List<T> output = new ArrayList<T>(); 
     return output; 
} 

Mi entendimiento es que tengo un método público denominado backwards que crea un ArrayList implementa la interfaz de lista y devolver el ArrayList. Mi pregunta es lo que realmente estoy diciendo al compilador con la siguiente parte ......

static <T> List<T> backwards (List<? super T> input) 
+2

'backwards' toma en una lista de algún tipo * *, donde ese tipo * * es un supertipo de' t' (por ejemplo, la entrada podría ser una '' Lista ), y devuelve una lista de 'T'. – Mehrdad

+0

Gracias Mehrdad por explicar esto. – user1459497

+0

¿Se usará 'input' en' backwards'? No vi dónde se usará. – Crazenezz

Respuesta

31

Usted está diciendo al compilador:

<T> 

"Estoy declarando un tipo arbitrario T para este método, que puede ser cualquier cosa (no primitivo) para cada llamada del método ".

List<T> 

"Este método devolverá un List elementos que contienen de ese tipo T."

List<? super T> input 

"Este método se llevará a un parámetro llamado input, que es un List que contiene elementos de tipo T, o cualquier super-tipo de T. Por ejemplo, si T es Integer, input podría ser una List<Integer>, List<Number> , o List<Object>. "

+0

Gracias Paul. Tu explicación es muy clara y detalles. – user1459497

+5

Esto no trata lo que la firma de método 'pública estática Lista ' significa en comparación con 'lista estática pública '. – 2rs2ts

+2

@agarrett 'Lista public static ' no declarar un parámetro de tipo, por lo que debe estar ya en el ámbito de un parámetro de tipo genérico 't' de la clase que se declara. Pero la pregunta ni siquiera menciona eso, así que no entiendo por qué lo mencionaste. –

Cuestiones relacionadas