“Tipo genérico ilegal de instanceof” ao usar instanceof em um tipo de classe interna?

StackOverflow https://stackoverflow.com/questions/1895682

  •  19-09-2019
  •  | 
  •  

Pergunta

I codificado em NetBeans algo como isto:

public class Grafo<V, E>
{
    class Par
    {
        int a, b;
        Par(int a, int b) {
            this.a = a;
            this.b = b;
        }

        @Override
        public boolean equals(Object ob)
        {
            if(ob instanceof Par) {
                Par p = (Par)ob;
                return this.a==p.a && this.b==p.b;
            }

            return false;
        }
    }

    //stuff...
} //end of class Grafo

O erro está nos Equals () da classe interna "Par".

O NetBeans diz que o erro é "tipo genérico ilegal de instanceof". O erro está na linha abaixo.

            if(ob instanceof Par) {

O que é a causa do erro?

Foi útil?

Solução

Tente ob instanceof Grafo<?,?>.Par

Eu acho que o compilador acha que ob instanceof Par envolve uma verificação de tempo de execução em parâmetros de tipo genérico; isto é, que é equivalente a ob instanceof Grafo<V,E>.Par. Mas os testes instanceof não pode verificar parâmetros de tipo genérico.

Outras dicas

@SuppressWarnings("unchecked")
@Override
public boolean equals(Object ob)
{
    if(ob instanceof Grafo.Par) {
        Par p = (Par)ob;
        return this.a==p.a && this.b==p.b;
    }

    return false;
}

Ou definir a sua classe interna static

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top