“Tipo genérico ilegal de instanceof” ao usar instanceof em um tipo de classe interna?
-
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?
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