Hola, el código compila y está bien diseñado
pero aparece un warning
.
Para ser coherente con los tipos
que declaras:
tienes ArrayList<Set> listObjsUniversoYNumeros
Más adelante declaras:
HashSet<String> universo = new HashSet<String>();
TreeSet<Integer> numeros = new TreeSet<Integer>();
Y finalmente añades:
listObjsUniversoYNumeros.add(universo);
listObjsUniversoYNumeros.add(numeros);
Pero estás añadiendo un tipo (HashSet y TreeSet) que no se corresponde con el tipo del ArrayList, que es Set.
Solución:
Set<String> universo = new HashSet<String>();
Set<Integer> numeros = new TreeSet<Integer>();
Estás usando el tipo Set y haciendo uso del polimorfismo los instancias bien en HashSet o bien en TreeSet, ahora sí te coinciden los tipos con los del ArrayList.Esto es una práctica muy habitual en Java. De esta forma un método puede requerir un tipo Set y puedes invocarlo pasándole tanto universo como numeros porque ambos son Set. En cambio si el método requiriera un HashSet sólo podrías pasarle universo pero no numeros. Ahí radica una ventaja del polimorfismo.
Ultimo paso, con lo que eliminamos el warning:
Iterator iElemento0 = elemento0.iterator();
Iterator iElemento1 = elemento1.iterator();
El compilador no llega a poder verificar qué tipos contienen los Set, eliminamos la declaración de tipo de Iterator y dejamos que sea el compilador en tiempo dinámico quien lo determine.
Espero haberme explicado, saludos