Je souhaite appeler la méthode main
qui est statique. J'ai obtenu l'objet de type Class
, mais je ne suis pas en mesure de créer une instance de cette classe et également pas en mesure d'invoquer la méthode static
main
.Appel d'une méthode statique à l'aide de la réflexion
Répondre
// String.class here is the parameter type, that might not be the case with you
Method method = clazz.getMethod("methodName", String.class);
Object o = method.invoke(null, "whatever");
Dans le cas où la méthode est l'utilisation privée getDeclaredMethod()
au lieu de getMethod()
. Et appelez setAccessible(true)
sur l'objet méthode.
String methodName= "...";
String[] args = {};
Method[] methods = clazz.getMethods();
for (Method m : methods) {
if (methodName.equals(m.getName())) {
// for static methods we can use null as instance of class
m.invoke(null, new Object[] {args});
break;
}
}
Pourquoi ne pas utiliser getMethod avec le nom correct au lieu de boucler toutes les méthodes? – mjaggard
Parfois, il est beaucoup plus facile de faire une boucle et de trouver la méthode par son nom que d'utiliser getMethod car getMethod (ou getDeclaredMethod) nécessite que vous développiez les types de paramètres dans les moindres détails. Cela dépend si la micro-efficacité est importante - l'itération Java est très rapide, donc à moins que vous n'appeliez la méthode des millions de fois dans une boucle interne, l'itération sera assez rapide –
Dans une situation plus réelle, vous ne trouverez probablement que la méthode une fois même si vous allez utiliser la réflexion pour l'invoquer plusieurs fois. Donc, les frais généraux supplémentaires lorsque vous le trouvez est sans importance. – RenniePet
lesemployés Javadoc de Method.invoke():
Si la méthode sous-jacente est statique, l'argument obj spécifié est ignoré. Cela peut être nul.
Qu'est-ce qui se passe quand vous
Class klass = ...; Method m = klass.getDeclaredMethod(methodName, paramtypes); m.invoke(null, args)
- 1. Appel de Response.TransmitFile() à partir de la méthode statique
- 2. étrange problème avec la réflexion et la méthode statique
- 3. Réflexion: obtenir Méthode statique de la classe parente
- 4. Appel de méthode statique dynamique en PHP?
- 5. NewLateBinding.LateSet à appel de réflexion
- 6. Comment utiliser la réflexion dans une méthode statique
- 7. Appel d'une méthode Java statique protégée à partir de Scala
- 8. Appel d'une méthode non statique à partir d'une méthode statique en Python
- 9. Appel d'une méthode statique à l'aide d'un type
- 10. appel fonction dynamique en utilisant la réflexion
- 11. Appel de constructeur de sous-classe à partir de la méthode de classe de base statique
- 12. Comment intercepter un appel de méthode statique en C#
- 13. Appel de l'initialiseur statique à nouveau
- 14. Invocation d'une méthode non statique à partir d'une méthode statique
- 15. Accès à la méthode statique personnalisée PHP
- 16. Objectif C: initialisation d'une variable statique avec appel de méthode statique
- 17. Appel de la méthode statique à partir de la classe B (extension de la classe A) de la classe A
- 18. structure de données laide à la recherche java
- 19. Accès à la propriété de la zone de liste déroulante non statique dans la méthode statique
- 20. méthode statique à portée IronPython
- 21. Comment puis-je vérifier si une méthode est statique en utilisant la réflexion?
- 22. La vitesse de l'appel de méthode de compilation JIT par rapport à la réflexion dans .NET
- 23. Appel du service WCF à l'aide de la méthode d'extension
- 24. Comment accéder à Gridview dans la méthode statique?
- 25. Appel à la méthode indéfinie Shell :: getAssociated()
- 26. Appel à la méthode indéfinie Facebook :: setUser()
- 27. Références de propriété statique Méthode non statique
- 28. Méthode statique C# à partir de l'objet
- 29. C++ appel de méthode Membre statique sur instance de la classe
- 30. Appel de la méthode AppDelegate à partir de la classe
nous dans le code, s'il vous plaît. –