1
resposta

[Dúvida] Validação com instanceof de classe com parâmetro Generics

Como posso garantir que o tipo A extende a class B?

Exemplo:

public interface A extends B<C> {
......
}

public class X {
    private A letraA;
    ...
}

Usando instanceof não é possível fazer a validação abaixo, pois dá erro de compilação:

if (letraA instanceof B<C>) {
    ...
}

Funciona mas não garante que a classe B tem parâmetro Generics da classe C:

if (letraA instanceof B) {
....
}
1 resposta

Oi João, tudo bem?

Pesquisei bastante sobre o assunto e não encontrei nenhuma forma de fazer essa verificação de uma vez, da forma que você propôs. Um jeito alternativo de verificar isso seria criar um método auxiliar na classe A (que faria parte de suas filhas) para verificar se C é o parâmetro do Generics:

boolean eParametro(T argument){
    if (argument instanceof C)
        return true;
    return false;
}

Depois, na verificação que você propôs, chamamos esse método, dessa forma:

if (letraA instanceof B and letraA.eParametro()) {
....
}

Não sei se essa é a melhor implementação, visto que, se houvessem várias classes como parâmetros do Generics, essa implementação seria muito extensa e deveríamos conhecer todas elas. Porém, parece ser a alternativa para conseguir fazer as duas verificações. Acredito que o conceito de herança não considere os Generics, por isso a dificuldade.

Espero ter ajudado, abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!