2012-01-18 8 views
7

Recientemente estuve leyendo el siguiente fragmento de código del tutorial de la colección oracle cuando me encontré con este fragmento de código.objeto genérico de devolución

public static <E> Set<E> removeDups(Collection<E> c) { 
      return new LinkedHashSet<E>(c); 
} 

yo no era capaz de entender por qué el valor devuelto es algo

  <E> Set<E> and not just Set<E> ? 
+0

Artículo de tutoriales de Java sobre métodos genéricos: http://docs.oracle.com/javase/tutorial/extra/generics/methods.html –

Respuesta

7

El tipo de retorno es, de hecho, simplemente Set<E>.

La otra <E> está ahí para indicar que se trata de un método genérico, y para indicar que E es un parámetro del genérico. Sin este <E>, el compilador supondría que E es una clase existente y trataría de localizarlo (produciendo un error si ninguna clase llamada E está en el alcance).

2

Es es solo Set, un conjunto con elementos del tipo E para ser más precisos. El <E> adicional delante del tipo de devolución es la declaración de tipo para ese método, especificando que el tipo <E> se debe usar solo en el alcance de este método particular, no confundir con un parámetro de tipo de clase, como este:

public class Example<E> { 

en el fragmento anterior, el parámetro de tipo <E> es visible para todos los métodos de la clase, mientras que una declaración de tipo como el que en su pregunta, es visible sólo en ese método.

2

el tipo de devolución es Set<E> no <E> Set<E>. El primer <E> declara el tipo genérico variable E, mientras que para otros <E> s asociados a clases de colección están utilizando esa declaración.

0

E puede ser una clase. Al devolver el <E> Set<E>, declara que E es un parámetro en el genérico.

Esta es una función estática, por lo que no hay una definición subyacente de lo que E es.

0

Sí, la primera parece un poco rara. Una forma de pensar acerca de la primera es que dice (o le recuerda) que el compilador averiguará E por sí mismo, según el tipo de colección pasada, y usted, el usuario, no necesita explícitamente Dile que es E

Cuestiones relacionadas