Comment fonctionne l'opérateur de distribution de Java?
Je suis en train de déboguer une question impliquant une ClassCastException en Java. Dans l'intérêt de résoudre le problème j'ai besoin de savoir ce qui se passe lorsque je lance à partir d'un Objet d'un type spécifique. Quelqu'un peut-il m'expliquer comment le Java opérateur de cast fonctionne à la Java le niveau et la JVM?
source d'informationauteur James McMahon
Vous devez vous connecter pour publier un commentaire.
Est le JLS assez bon?
En fait, peut-être cette partie est plus pertinent:
Parfaitement clair maintenant, n'est-ce pas? 😀
En d'autres termes, c'est le mieux que je puisse faire sans connaître plus de détails au sujet de votre problème.
Une cause probable de classe cast mystifcation est que, non seulement les types de match, mais aussi ils doivent être chargés par le même chargeur de classe.
Vous devriez être en mesure de vidage non seulement le type de hiérarchie, mais aussi l'identité du chargeur de classe pour chaque classe.
Ce genre de problèmes ne sont pas rares dans appserver-style environnements où le code de l'application et de l'infratructure code sont délibérément isolé - par exemple, si le système de classes sont accidentellement inclus dans l'application des Pots, vous pouvez avoir deux copies de la même classe dans la JVM et la vie devient confus
Casting affirme que l'exécution de type d'un objet est compatible avec le type statique, et donc vous permet d'appeler des méthodes de ce type sur l'objet.
Ici obj est un objet Integer, mais seulement accessible si une référence d'Objet:
Casting vous permet de le traiter comme un Entier (ou une super-classe de Entier) nouveau:
ClassCastException occours lorsque le type statique donnée ne correspond pas à l'exécution type de l'objet:
Vous pouvez trouver le runtime type d'un objet à l'aide de getClass() et les différentes méthodes de la Classe:
Utiles et références officielles sont trouvés dans la Machine Virtuelle Java Spécifications, spécifiquement §2.6.5, "Rétrécissement De Référence De Conversions", et en particulier la définition de la
checkcast
instruction.