2012-09-23 9 views
17

This estados de los enlaces siguientes: la¿Qué se entiende por tipo parametrizado?

La creación de instancias de un tipo genérico con argumentos de tipo real que se denomina un tipo parametrizado. Ejemplo (de un tipo parametrizado):

Collection<String> coll = new LinkedList<String>();

Entonces, ¿cuál es el tipo parametrizado?

  • Collection<String> o
  • LinkedList<String>
+5

¿Qué hay de la lectura de la siguiente frase en el enlace que le dio: "La Colección declaración denota un tipo parametrizado, que es una instancia de la Colección de tipo genérico, en el lugar el soporte E ha sido reemplazado por el tipo de concreto String "? –

+0

@JBNizet, Sí, mi confusión proviene del tipo de creación de instancias 'LinkedList '. Tu comentario a continuación me lo aclara. – wulfgarpro

Respuesta

22

Son ambos tipos parametrizados: tipos que tienen otros tipos como parámetros.

El hecho de que tenga diferentes tipos en los dos lados de la expresión es irrelevante, y tiene que ver con el comportamiento polimórfico, es decir, porque LinkedList es un subtipo de Collection.

1

Ambos usos de recogida

Collection<String> 
LinkedList<String> 

son tipos parametrizados aquí con String ser el tipo que se utiliza.

11

Tipo parametrizado generalmente es una clase que se ocupa de otro objeto sin interés de qué tipo es. El tipo se puede definir usando un "nombre" simbólico y luego se pasa cuando se crea una instancia de clase.

Por ejemplo:

class MyClass<T> { 
    private T obj; 
    public MyClass<T>(T obj) { 
     this.obj = obj; 
    } 
    public int getId() { 
     return obj.hashCode(); 
    } 
} 

En el ejemplo por encima de MyClass envolturas objeto de cualquier tipo y ejecuta su método hashCode() usando el hecho de que siempre existe este método.

Aquí es cómo se utiliza esta clase:

int sid = new MyClass<String>("aaaa").hashCode();

por favor la atención que no se puede decir new MyClass<String>(123): el hecho de que objeto se crea con el parámetro String dicta el tipo de argumento del constructor.

Volviendo a su ejemplo Collection<String> significa "colección de cadenas". Esto significa que no puede agregar objetos de otro tipo a esta colección.

+0

si tiene un donde T es Cadena, entonces puede pasar todas las subclases de T, ¿correcto? – Ungeheuer

+0

Casi correcto. Excepto el hecho de que String es la clase final y no se puede extender. – AlexR

+0

Entonces, básicamente, todos los tipos genéricos son tipos parametrizados, ¿verdad? –

0

ParameterizedType representa un tipo parametrizado como Collection.

Un tipo parametrizado se crea la primera vez que se necesita mediante un método reflectante, como se especifica en este paquete. Cuando se crea un tipo parametrizado p, se resuelve la declaración de tipo genérico que p instancia, y todos los argumentos de tipo p se crean recursivamente. Vea TypeVariable para detalles sobre el proceso de creación de variables de tipo. La creación repetida de un tipo parametrizado no tiene ningún efecto.

Las instancias de clases que implementan esta interfaz deben implementar un método equals() que iguala dos instancias que comparten la misma declaración de tipo genérico y tienen parámetros de tipo igual.

4

Parece que el tipo genérico y el tipo parametrizado son sinónimos. Pero no parece correcto llamar por ejemplo al Box<Integer> un tipo genérico ya que en el sentido de la palabra ya no es genérico. Así que probablemente:

Un tipo genérico es la declaración con el parámetro de tipo formal/s

class Box<T> { .. } 

Box<T> es un tipo genérico

Un tipo parametrizado es la declaración con el argumento de tipo real/s

Box<Integer> b;   

Box<Integer> es un tipo parametrizado

Un tipo sin formato es la declaración de un tipo genérico sin argumentos/s de tipo real.

class Box<T> { .. } 
Box b; 

Box es un tipo de prima

Cuestiones relacionadas