102 votes

Y at-il quelque chose comme instanceOf (Class <?> c) en Java?

Je veux vérifier si un objet o est une instance de la classe c ou d'une sous-classe de c. Par exemple, si p est de la classe Point, je veux que x.instanceOf (Point.class) soit vrai et que x.instanceOf (Object.class) soit vrai. Je veux que cela fonctionne aussi pour les types primitifs en boîte. Par exemple, si x est un entier, alors x.instanceOf (Integer.class) doit être vrai. Une telle chose existe t elle? Si non, comment puis-je implémenter une telle méthode?

196voto

gustafc Points 13552

Class.isInstance fait ce que vous voulez.

 if (Point.class.isInstance(someObj)){
    ...
}
 

Bien sûr, vous ne devriez pas l'utiliser si vous pouviez utiliser instanceof , mais pour les scénarios de réflexion, cela s'avère souvent utile.

21voto

Michael Borgwardt Points 181658

Je veux vérifier si un objet o est un instance de la classe c ou d'un sous-classe de c. Par exemple, si p est de la classe Point que je veux x.instanceOf(Point.class)

Euh... Quoi? Quelles sont o, p et x?

Je veux que cela fonctionne également pour des primitifs les types. Par exemple, si x est un entier alors x.instanceOf(Integer.class) et aussi x.instanceOf(Object.class) devrait être vrai.

Pas de. Il ne devrait même pas compiler. Les Primitives ne sont pas des objets, et vous ne pouvez pas appeler des méthodes sur eux.

De toute façon, il y a trois choses, dont l'une peut certainement obtenir ce que vous voulez (ils diffèrent quelque peu dans exactement où l'appliquer:

  • L' instanceof opérateur si vous connaissez la classe au moment de la compilation.
  • Classe.isInstance() si vous voulez vérifier si un objet de la classe contre classe pas connu au moment de la compilation.
  • Classe.isAssignableFrom() si vous voulez vérifier la cessibilité donné deux objets de la classe.

10voto

ammoQ Points 17866
 x instanceof Integer
x instanceof Object
 

il suffit d'utiliser la bonne syntaxe

pour les types primitifs, vous devez le faire complètement différemment. Etant donné que vous ne pouvez pas créer de méthodes pour celles-ci, vous avez besoin d'une classe qui conserve la méthode. Ainsi, au lieu de "x.instanceOf (Integer.Class)", vous devez appeler "MyClassComparer.instanceOf (x, Integer.Class)" ou quelque chose du genre. Cela pourrait facilement être mis en œuvre par des méthodes de surcharge, mais je ne parviens pas à voir un cas où cette fonctionnalité serait souhaitable du tout.

5voto

victor hugo Points 16700

En fait, en Java, il existe un opérateur booléen appelé instanceof qui peut être utilisé pour déterminer si un objet est une instance d'une classe, une instance d'une sous-classe ou une instance d'une classe qui implémente une interface particulière.

 if(obj instanceof SomeClass) {
    // Do something
}
 

Le tutoriel Java a un bon exemple de cet opérateur

0voto

fmsf Points 13399

Tu peux faire:

 if (foo instanceof classNameYouWantToCheck)
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X