1. Un método sin tipo genérico
Suponiendo que desee escribir un método que tome dos conjuntos y obtenga su intersección. Aquí hay una forma de escribir dicho método:
public static Set getIntersection(Set set1, Set set2){ Set result = new HashSet(); for(Object o: set1){ if(set2.contains(o)) result.add(o); } return result; } |
Este método no es seguro para los tipos y el compilador da advertencias. Tiene varios problemas potenciales. Primero, cuando se llama al método y se devuelve algún conjunto, es posible que la persona que llama no sepa el tipo y necesite una operación de conversión para cada elemento. En segundo lugar, dos conjuntos con tipos diferentes no deberían poder pasarse al método. Por último y en general, siempre debemos corregir los mensajes de advertencia.
2. Un método con tipo genérico
El método se puede arreglar especificando un tipo genérico como el siguiente:
public static <E> Set<E> getIntersection(Set<E> set1, Set<E> set2){ Set<E> result = new HashSet<E>(); for(E o: set1){ if(set2.contains(o)) result.add(o); } return result; } |
Este método es de tipo seguro y no hay advertencias. Especificamos que el tipo de elemento de los tres conjuntos debe ser el mismo E. De esta manera, el llamador conoce el tipo de retorno, por lo que puede usar directamente su elemento sin conversión. Ahora existen restricciones estrictas sobre el tipo de elemento, por lo que solo dos conjuntos con el mismo tipo de elemento pueden obtener la intersección.
Tenga en cuenta que la lista de parámetros de tipo, <E>
en este caso, va entre los modificadores del método y su tipo de retorno.