2010-12-09 9 views
0

Comment appelez-vous une méthode java statique lorsque l'un des paramètres de la méthode invoquent invoke(Object obj, Object[] args), nécessite un paramètre objet?utilisant la méthode invoke avec des méthodes statiques?

Par exemple
Ici, j'ai une section de code qui vérifie une classe et localise toutes les méthodes statiques qui n'ont pas de paramètres, un type de retour de Boolean et commence par le nom "test". J'essaie d'invoquer de telles méthodes pour voir si elles reviennent vrai, et je suis en désaccord sur la façon de le faire.

for (int i = 0; i < Class.forName(name).getDeclaredMethods().length; i++) { 
    Method method = Class.forName(name).getDeclaredMethods()[i]; 
    if (method.getParameterTypes().length == 0 
      && method.getReturnType().getName() == "boolean" 
      && method.getName().startsWith("test", 0)) { 
     if (Class.forName(name).getDeclaredMethods()[i].invoke()==true) 
      System.out.println("Test" + " " + Class.forName(name).getDeclaredMethods()[i].getName() + " " + "succeeded"); 
    } 
} 
+0

? avez-vous déjà accepté l'une des réponses? –

+0

que voulez-vous dire? ... Vous pouvez accepter des réponses? – Jake

+0

ceci fait en cliquant sur le chèque? – Jake

Répondre

1

tout d'abord vous avez demandé que vous méthode de contrôle pour staticness. Mais en réalité vous n'êtes pas. Utilisez cette option pour vérifier le modificateur static,

Modifier.isStatic(method.getModifiers()); 

Maintenant, vous pouvez passer null comme premier argument et un tableau vide comme deuxième, à method.invoke() si la méthode est static avec zéro arguments. Par exemple,

Class.forName(name).getDeclaredMethods()[i].invoke(null, new Object[0]); 

TIP: Ne pas répéter Class.Forname() chaque fois. Stockez-le dans une variable et utilisez-le. Faites la même chose quand c'est approprié.

+0

Ah, très bien. Je me demandais s'il y avait une méthode pour vérifier la statique, et quoi utiliser pour l'objet en null ... merci – Jake

Questions connexes