Código Fuente: Ejemplo 8
a) No se puede usar tipos parámetro, para reemplazar a tipos primitivos.
b) Una clase genérica es compartida por todas sus invocaciones:
Setenteros = new HashSet (); Set doubles = new HashSet (); System.out.println("-->"+(enteros.getClass()==doubles.getClass()));
En este ejemplo se imprime “true”, ya que todas las instancias de una clase genérica tienen la misma clase en tiempo de ejecución sin importar el valor del parámetro actual.
c) No se debe usar los tipos de parámetros al hacer “instanceof” ni “cast”.
1: Set numeros = new HashSet();
2: //if(numeros instanceof HashSet){}
3: SetnumerosEnteros = (HashSet )numeros;
Línea 2 : No va a compilar ya que no se puede usar esa expresión con “instanceof”
Línea 3: Si compila pero es innecesario ya que es equivalente a: “(HashSet) numeros”. Va a generar un “unchecked warning”
d) Desde la versión 5, Class es genérico, por tanto el tipo de “Integer.class” es “Class
1: ClassstringClass = String.class;
2: try {
3: String nuevoString = stringClass.newInstance();4: } catch (Throwable e) {
5: e.printStackTrace(); 6: }Notar que en la línea 3 ya no necesitamos hacer cast.
e) Con respecto a la clase Exception tenemos lo siguiete:
1: public class ExcepcionEspecificaextends Throwable> extends Throwable{
2: public void prueba() {
3: // try {
4: // }catch(T e){
5: // }
6: }7: public void prueba2() throws T{
8: } 9: }Línea 1 : Es inválida ya que ninguna clase genérica puede extender de “Throwable”
Línea 4 : Es inválida ya que no se puede poner un tipo genérico en el catch.
Línea 7: Si es válido ya que sí se puede colocar un tipo genérico en la zona de “throws”.
f) No se puede crear arrays de tipos genéricos.
