Je sais getclass () code> méthode dans java.lang.Object code>. Mais dans ma demande, je connais toutes mes classes. Donc, quel est le but réel d'utiliser cette méthode? P>
7 Réponses :
Vous ne vous laissez pas dans le monde merveilleux de reflet . Utilisation de la réflexion, vous pouvez inspecter programmatiquement les cours, définir leurs champs, appeler leurs méthodes, etc. Vous pouvez faire des choses très puissantes avec elle et la plupart des cadres que vous utilisez quotidiennement (par exemple, hibernate, printemps, guice, etc.) dépendent très fortement pour que les choses se produisent. p>
Bon aperçu. Mais je pense qu'il est important que, tandis que cadres i> puisse faire des choses merveilleuses avec elle, le code d'entreprise classique devrait généralement éviter i> l'utiliser (au moins directement), car il peut facilement i> Faites votre structure de code un désordre illisible.
GetClass est généralement utilisé dans le code d'entreprise lorsqu'il remplace la méthode des égaux, pour vérifier que la classe de l'autre objet est identique à la classe de cet objet.
Un exemple simple: p> BTW, getclass () code> est une méthode publique sur objet, il est donc hérité pour toutes les instances de classes tous les em>. Si vous avez affaire à un type super type (une superbe classe ou une interface, etc.) et que vous souhaitez connaître la classe de mise en œuvre, getclass () code> vous indiquera la classe de n'importe quel objet. Vous pouvez ensuite inspecter la classe pour trouver plus d'informations. getclass () code> elle n'est pas Une partie de la réflexion - c'est une méthode simple qui renvoie un objet simple (classe). Toutefois, l'objet de classe renvoyé de getclass () code> peut être utilisé avec réflexion (voir le java.lang.reflect code> package) pour trouver beaucoup de choses intéressantes sur la classe. p> p>
"rien de ce que ce soit", sauf qu'il renvoie un type sur le type central b> dans n'importe quel code de réflexion.
@ Joachim Sauer OK - Vous avez raison. C'était un peu sur le dessus. J'ai trempé mon post :)
Vous pouvez utiliser les objets code> code> pour réflexion ou vous pouvez les utiliser pour d'autres éléments, tels que des clés dans une carte permettant de conserver des données sur les choses à un niveau de classe. p>
Par exemple, vous pouvez avoir une classe avec des états et des méthodes statiques qui font des choses comme instancier des objets et rassembler des statistiques. En fait, vous pouvez avoir plusieurs classes de ce type qui font toutes la même chose et semblent tous fonctionner de la même manière, et donc des possibilités de convergence. Étant donné que la classe est statique, vous avez naturellement une cartographie d'une classe à certains états et opérations à cet état. p>
Ainsi, vous pouvez ainsi extraire le code commun de vos classes statiques et les mettre dans une classe qui fournit toutes les méthodes, avec l'ajout d'un argument code> code> pour spécifier l'état qui doit être utilisé pendant opérations suivantes. p>
Mais dans ma candidature, je connais toutes mes classes. Donc, quel est le but réel d'utiliser cette méthode? P> blockQuote>
Maintenant que vous avez un système qui fonctionne sur des objets code> code>, vous pouvez lui donner des objets que vous ne possédez pas, tels que les bibliothèques tiers que vous décidez d'utiliser dans votre application. , et vous pouvez le faire au moment de l'exécution! p>
Les états Javadoc: p>
L'objet de classe retourné est l'objet verrouillé par
statique Synchronisée Code> Méthodes de la classe représentée. P> blockQuote>Cela signifie que si vos classes disposent d'une méthode code> Synchronisée statique >, le JVM utilise le
getclass () code> pour mettre un verrou sur la méthode. P>
Il n'y a aucune preuve ici que le JVM appelle réellement GetClass () à cette fin. Il semble probable mais ce n'est pas impliqué par le Javadoc.
@EJB - Le texte Javadoc cité est une déclaration Explicite non catégorie B> que c'est ce que fait JVM. La langue utilisée dans la citation ne laisse aucune place pour "Peut-être / peut-être pas".
Parfois, nous avons besoin de l'instance code> code> pour un objet. Comme si nous programmons contre les interfaces em> mais besoin de désormais le type actuel d'une implémentation: voici un exemple trivial pourquoi nous avons besoin getclass () code> sur java.lang.Object code>: p>
Mais dans ma candidature, je connais toutes mes classes. Donc, quel est le but réel d'utiliser cette méthode? P>
Donc, si vous écrivez cela, vous savez toujours ce que la vraie classe
choses [0] code> est? P>Class cls = things[0].getClass();
Hey regarde il a répondu à la question et la réponse à la vie de l'univers et de tout!
Je suppose que MedoPal vient de profiter de votre référence à 42 ; Je ne pense pas que cela a été signifié de manière négative. Oh, et +1, BTW (pas pour 42 mais pour une bonne réponse).
@medopal - mes excuses ... Je suis parfois un peu "lent" à la fin de la journée
Vous pouvez utiliser pour:
if (obj == null) return false; if (getClass() != obj.getClass()) return false;
- Obtenez les champs de la classe (réflexion): li> ul>
Field[] fields = this.getClass().getFields();
- Utilisez-le au lieu de l'instanceOf dans la méthode Equals pour persister le contrat de symetrie de la méthode égale (comme expliqué ici ) li> ul>
Constructor[] constructors = this.getClass().getConstructors()
Cette question est très utile