4 votes

Voir si un objet est une instance d'une classe passée par une chaîne de caractères.

J'imagine qu'il doit y avoir un moyen d'utiliser la réflexion pour faire ce que je veux faire.

Je dois être capable de prendre une chaîne de caractères au moment de l'exécution qui est d'une certaine classe, par exemple :

string s = "mypackage.MySuperClass"

Alors je peux avoir un objet d'un certain type. Il peut s'agir d'un des objets suivants :

mypackage.MySuperClass obj = new mypackage.MySuperClass();

ou

mypackage.MySubClass obj2 = new mypackage.MySubClass();

ou

someotherpackage.SomeOtherClass obj3 = new someotherpackage.SomeOtherClass();

Ce que j'ai besoin de faire, c'est de voir si un objet (dont le type est déterminé au moment de l'exécution), est égal à la chaîne s (qui est également déterminée au moment de l'exécution par des moyens complètement différents).

Dans les cas ci-dessus, je voudrais que obj et obj2 soient du même type que s (puisque MySubClass est une sous-classe de MySuperClass), mais pas obj3.

Existe-t-il un moyen simple de faire cela en Java ? Peut-être quelque chose utilisant instanceOf ?

7voto

finnw Points 24592

On dirait que vous voulez quelque chose comme ça :

boolean isInstance(Object o, String className) {
    try {
        Class clazz = Class.forName(className);
        return clazz.isInstance(o);
    } catch (ClassNotFoundException ex) {
        return false;
    }
}

Ou vous pouvez le faire dans l'autre sens - prendre la classe de O ( o.getClass() ), trouver toutes les classes ancêtres et comparer leurs noms à className .

1voto

Nate Points 9879

Vous pouvez utiliser Class.forName(String className) pour obtenir le Class en fonction de la valeur de la chaîne transmise.

Si tout ce qui vous intéresse est de savoir s'il s'agit d'une instance d'une classe particulière, vous pouvez alors appeler isInstance(Object o) sur le Class pour tester si le paramètre est une instance de la classe.

Si vous avez réellement besoin d'un objet de la classe, vous pouvez appeler newInstance() sur le Class . Vous pouvez ensuite tester l'objet résultant avec instanceOf contre un autre objet.

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