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?
Réponses
Trop de publicités?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.
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.
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.
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