2010-09-22 16 views
2
public class A { 
    static class B { 
    } 
} 

public class C { 
    void m(X x) { 
     if (x instanceof A.B) { ... } // not working 
    } 
} 

Existe-t-il un moyen de vérifier si un objet (x) est réellement la classe interne (B) d'une classe (A) dans ce scénario?Utiliser instanceof avec classe interne statique de classe différente

Je reçois cette erreur, mais je n'ai malheureusement aucun contrôle sur les classes A et B.

Le type AB n'est pas visible

+1

Non, sauf si vous pouvez rendre la classe interne publique (ou déplacer votre appelant dans le même paquet que A). –

Répondre

2

J'ai fait cette réponse comme un commentaire, mais avec un peu de réflexion (le genre pensant, pas le genre de codage!), je le transforme en une réponse. Puisque vous n'avez aucun contrôle sur A ou B, et que B a un accès au paquet, vous ne pouvez le voir que depuis les classes qui sont dans le même paquet que A. Alors, que pouvez-vous faire - si vous ne voulez pas pour déplacer C dans le même paquet - écrire une classe d'utilité - l'appeler U - qui a une fonction booléenne, prendre un X et retourner si c'est une instance de AB

+1

+1: Un peu de réflexion (le type de codage, pas le type pensant) pourrait être en mesure de le faire. Mais ce n'est pas le chemin à parcourir. –

+0

Qu'entendez-vous par là? J'ai ajouté un nouveau paquet avec le même nom que le paquet dans lequel A est situé à mon projet et suis capable d'accéder à A.B dans une classe d'aide. – HTTPeter

+0

J'ai peur de ne pas comprendre la question - ou même si c'est pour moi ou @donroby. –