¿No puede agregar un objeto ModuleInfo a ArrayList <? amplía ModuleInfo>

No estoy seguro si estoy usando los genéricos correctamente, pero básicamente creé unArraylist<? extends ModuleInfo> moduleList yModuleInfo m objetos, y trató de llamarmoduleList.add(m). Sin embargo, no se compilará y recibo un mensaje de error que me parece un tanto críptico. El mensaje de error y el código están abajo. ¿Alguien más sabe lo que está mal?

void load() {
    ArrayList<? extends ModuleInfo> moduleList = new ArrayList();
    Iterator<? extends ModuleInfo> iter_m;
    ModuleInfo m;

    //get modules that depend on this module
    //retrieve list of all modules and iterate trough each one
    iter_m = Lookup.getDefault().lookupAll(ModuleInfo.class).iterator();
    while(iter_m.hasNext()) {
        m = iter_m.next();
        //loop through modules dependencies and check for a dependency on this module
        for(Dependency d : m.getDependencies()) {
            //if found, the module to the list
            if(d.getName().equals(GmailAuthManager.class.getPackage().getName())) {
                moduleList.add(m);
                break;
            }
        }
    }
}

El error es un siguiente:

error: no suitable method found for add(ModuleInfo)
                    moduleList.add(m);
    method ArrayList.add(int,CAP#1) is not applicable
      (actual and formal argument lists differ in length)
    method ArrayList.add(CAP#1) is not applicable
      (actual argument ModuleInfo cannot be converted to CAP#1 by method invocation conversion)
  where CAP#1 is a fresh type-variable:
    CAP#1 extends ModuleInfo from capture of ? extends ModuleInfo

Respuestas a la pregunta(2)

Su respuesta a la pregunta