“Tipo generico illegale di instanceof” quando si utilizza instanceof su un tipo di classe interna?
-
19-09-2019 - |
Domanda
ho codificato in NetBeans qualcosa di simile:
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
L'errore è nel metodo equals () dalla classe interna "Par".
NetBeans dice che l'errore è "tipo generico illegale di instanceof". L'errore è nella riga sotto.
if(ob instanceof Par) {
Qual è la causa dell'errore?
Soluzione
Prova ob instanceof Grafo<?,?>.Par
Penso che il compilatore pensa che ob instanceof Par
comporta un controllo runtime su parametri di tipo generico; cioè che è equivalente a ob instanceof Grafo<V,E>.Par
. Ma i test instanceof
non possono controllare i parametri di tipo generico.
Altri suggerimenti
@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;
}
O definire la classe static
interna
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow