2010-11-25 4 views
3

Existe-t-il un moyen Java de stocker une référence à une classe? Voici ce que je veux faire:Comment stocker une référence à une classe en Java?

public class Foo 
{ 
    public static void doSomething() {...} 
}; 

SomeClass obj = Foo; 
obj.doSomething(); 

Y at-il une classe « SomeClass » qui me permet de stocker une référence à une classe, de sorte que je peux utiliser plus tard l'objet stocké pour appeler un membre statique de la classe d'origine?

La chose évidente serait de classe de classe:

Class obj = Foo.class; 
obj.someMember().doSomething(); 

mais je ne l'ai pas compris que des membres de la classe de classe pourrait agir comme « someMember() » ... aucun d'entre eux, je pense.

Est-ce que quelqu'un sait si ce que j'essaie de faire est possible en Java?

+0

Avez-vous regardé Clone()? – CoolBeans

+0

Avez-vous regardé http://download.oracle.com/javase/1.4.2/docs/api/java/lang/reflect/Method.html? – Gabe

Répondre

5

Vous pouvez obtenir dynamiquement une méthode à partir d'un objet Class à l'aide des méthodes getMethod() de la classe. Si une méthode est statique, alors le paramètre "object" de "invoke" sera nul.

Par exemple, le « obj.someMember() » serait au-dessus de quelque chose comme ceci:

obj.getMethod("someMember", null).invoke(null, null); 

Les valeurs nulles supplémentaires sont parce que votre méthode ne requiert aucun paramètre. Si votre méthode prend des paramètres, ils devront être transmis en conséquence.

Cela lancera diverses exceptions vérifiées, vous devrez donc également les gérer.

Une fois que vous avez appelé la méthode, elle renvoie un objet. Vous aurez besoin de lancer le tout ce que vous attendez, et alors vous serez capable d'exécuter la méthode "doSomething()" directement dessus. Ceci utilise une astuce appelée réflexion, si vous voulez en lire plus à ce sujet. :)

+0

Super - c'est à peu près ce que je cherchais. –

0

Si vous utilisez jdk1.5 ou supérieur, l'annotation sera un choix lorsque vous souhaitez obtenir des métadonnées de classe.

Questions connexes