style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Como validar paso de parametros genericos en metodo recursivo

Tengo el sigueinte codigo:

    public void list(Container container,
                     String fld_name,
                     ListModel<?> myListModel) {
        for (Component comp : container.getComponents()) {
            if (comp instanceof JList) {
                if (((JList) comp).getName() != null) {
                    if (((JList) comp).getName().contentEquals(fld_name)) {                                              
                        ((JList) comp).setModel(myListModel);
                    }
                }
            } else if (comp instanceof Container) {
                list((Container) comp, fld_name, myListModel);
            }
        }
    }

Como ven simplemente lo que hace es recorrer los container recursivamente y en cada container busca un JList especificado por su nombre, si lo consigue asigna un ListModel de tipo generico usando el metodo setModel() correspondiente, al compilar lanza el siguiente warning:

 warning: [unchecked] unchecked call to setModel(ListModel<E>) as a member of the raw type JList
                        ((JList) comp).setModel(myListModel);
  where E is a type-variable:
    E extends Object declared in class JList

Pos supuesto puedo deshabilitar el warning quitando el -Xlint pero la pregunta es porque no se valida correctamente en este caso si el parametro esta declarado como un generico y el setModel en su definicion es public void setModel(ListModel model) ?? Alguien podria darme luz en este asunto ???

Gracias

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Cid

Debido a que utilizaste un

Debido a que utilizaste un genérico con uso de comodín (<?>) esto quiere decir que esta a la espectativa de lo que reciba como resultado (lo que sea, siempre y cuando sea objeto lo tomará ListModel<Peras>  ListModel<Manzanas> hasta un < ListModel <Caca> ), y en la definición de la API de esa Clase utiliza la letra "E" que se usa pra elementos específicos y no "?" que se usa para comodines.

Imagen de ezamudio

? extends Object

Creo que debes poner ListModel<? extends Object>

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">