2010-01-31 3 views
4

J'imagine qu'il doit y avoir un moyen d'utiliser la réflexion pour faire ce que je veux faire.Voir si un objet est une instance d'une classe passée par une chaîne

je dois être en mesure de prendre une chaîne à l'exécution qui est d'une certaine classe, par exemple:

string s = "mypackage.MySuperClass" 

Ensuite, je peut avoir un objet d'un certain type. Il pourrait être l'une des options suivantes:

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

ou

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

ou

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

Ce que je dois faire est de voir si un objet (que son type est déterminé lors de l'exécution) , est égal à la chaîne s (qui est également déterminée à 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), et obj3 ne le ferait pas.

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

+0

(Notez que les noms de classes ne sont pas uniques en Java.) –

Répondre

7

On dirait que vous voulez quelque chose comme ceci:

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 o (o.getClass()), trouver toutes les classes d'ancêtres et de comparer leurs noms à className.

1

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

Si tout ce que vous êtes préoccupé est de savoir s'il est une instance d'une classe particulière, vous pouvez appeler isInstance(Object o) sur le Class pour tester si un 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 par rapport à un autre objet.

Questions connexes