2009-12-13 13 views
3

Je codé dans NetBeans quelque chose comme ceci:"type générique illégal de instanceof" lors de l'utilisation de instanceof sur un type de classe interne?

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'erreur est dans la méthode equals() de la classe intérieure "Par". NetBeans dit que l'erreur est "type générique illégal de instanceof". L'erreur est dans la ligne ci-dessous.

  if(ob instanceof Par) { 

Quelle est la cause de l'erreur?

Répondre

6

Essayez ob instanceof Grafo<?,?>.Par

Je pense que le compilateur pense que ob instanceof Par implique un contrôle d'exécution sur les paramètres de type générique; c'est-à-dire qu'il est équivalent à ob instanceof Grafo<V,E>.Par. Mais les tests instanceof ne peuvent pas vérifier les paramètres de type générique.

3
@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 définir votre classe interne static