Java genéricos com compatibilidade de classe e interface
Em Java, criar um objeto de classe com restrições específicas pode ser desafiador. Um cenário comum é definir um objeto de classe que estenda uma classe específica e, ao mesmo tempo, implemente uma interface específica. No entanto, alcançar ambas as restrições simultaneamente usando genéricos tem sido um ponto comum de discórdia.
Tentativas de forçar uma classe a estender ClassA e implementar a interface InterfaceB usando a sintaxe:
Class extends ClassA>
ou
Class extends InterfaceB>
satisfará apenas um requisito e não combinará ambos.
Solução
Felizmente, os genéricos Java permitem múltiplas interfaces ou classe plus interfaces. Para conseguir isso, modifique a declaração curinga da seguinte maneira:
Conforme ilustrado no Tutorial de Genéricos da Sun, anexando & InterfaceName para cada interface necessária adicional, um combinação arbitrariamente complexa pode ser alcançada. Por exemplo, a declaração JavaDoc de Collections#max demonstra esta complexidade:
public static> T max(Collection extends T> coll)
Preservar a compatibilidade binária requer essas declarações intrincadas.
Implementação com restrições de classe e interface
Para implementar a restrição desejada em uma declaração de variável, coloque um limite genérico em uma classe:
class classB { } interface interfaceC { } public class MyClass{ Class variable; }
Conclusão
Os genéricos Java fornecem maneiras flexíveis de criar combinações restritas de classes e interfaces. Ao compreender a sintaxe e as limitações, os desenvolvedores podem aproveitar esse poder para impor requisitos específicos em seu código.
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