Type Safety and Wildcard Generics: Understanding the Forbidden Modifier
Ao trabalhar com coleções genéricas em Java, o conceito de genéricos curinga pode introduzir certos limitações que podem inicialmente parecer contra-intuitivas. Um excelente exemplo é a incapacidade de adicionar valores a uma coleção Java com um tipo genérico curinga.
Considere o seguinte trecho de código:
List extends Parent> list = ...; Parent p = factory.get(); // returns concrete implementation list.set(0, p); // fails here: set(int, ? extends Parent) cannot be applied to (int, Parent)
Por que este código falha ao compilar? A resposta está nos mecanismos de segurança inerentes que são aplicados pelos genéricos curinga.
O princípio da recuperação irrestrita e adição restrita
O tipo genérico curinga, denotado por ? estende Parent, representa uma lista de elementos que são descendentes da interface Parent. Embora permita a recuperação irrestrita desses elementos, a segurança do tipo dita restrições na adição de valores à coleção.
Se o código pudesse ser compilado, permitiria a atribuição de uma instância Parent a um elemento dentro da lista. No entanto, esta ação pode quebrar a segurança de tipo.
Considere o seguinte cenário:
ListchildList = new ArrayList(); childList.add(new Child()); List extends Parent> parentList = childList; parentList.set(0, new Parent()); Child child = childList.get(0); // No! It's not a child! Type safety is broken...
Neste cenário, uma lista de objetos Filho é convertida em uma lista de ? estende Pai. A atribuição subsequente de uma instância Parent ao primeiro elemento da lista viola a segurança de tipo, pois a lista resultante contém um elemento que não é uma instância Child válida.
Garantindo segurança de tipo imutável
Ao proibir a adição de valores a coleções genéricas curinga, Java impõe segurança de tipo imutável. Isso garante que os elementos da lista sempre cumpram as restrições impostas pelo seu tipo declarado.
Na ausência dessa restrição, a segurança do tipo seria comprometida, levando a possíveis erros e comportamento inesperado.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3