Puis-je passer une Méthode en paramètre d'une autre méthode en java?
Je suis en train d'essayer de mesurer le temps d'exécution de plusieurs méthodes. j'ai donc pensé à faire une méthode au lieu de dupliquer le même code plusieurs fois.
Voici mon code:
private void MeasureExecutionTime(Method m)
{
startTime = System.nanoTime();
try
{
m();
}
finally
{
endTime = System.nanoTime();
}
elapsedTime = endTime - startTime;
System.out.println("This takes " + elapsedTime + " ns.");
}
Supposons que j'ai myMethod()
, comment puis-je utiliser MeasureExecutionTime()
pour mesurer myMethod
's le temps d'exécution?
OriginalL'auteur Eng.Fouad | 2011-05-19
Vous devez vous connecter pour publier un commentaire.
Méthodes ne sont pas les objets de première classe en Java, donc ils ne peuvent pas être passés en paramètres. Vous pouvez utiliser l'enveloppe de votre appel de méthode dans un annoymous classe qui étend la classe par exemple, la
Runnable
interface:OriginalL'auteur Oliver Charlesworth
la façon la plus simple de le faire est de passer d'une interface. Donc, quelque chose comme
et puis vous pouvez avoir des méthodes qui prennent CommonFuncs comme argument. La mise en œuvre de ces méthodes peut appeler la
execute
méthode.OriginalL'auteur hvgotcodes
Je suis d'accord avec @hvgotcodes, Mais oui, il est possible, si vous ne l'appelez pas comme
m()
, mais à l'aide de invoquer (ce qui signifie que vous devriez probablement passer à un autre argument ou deux avec elle...).OriginalL'auteur MByD
Vous êtes dans le bon chemin, vous devez transmettre à la Méthode de l'objet, de l'objet cible sur laquelle exécuter la méthode et les arguments qu'il faut, puis invoque dans votre try catch, quelque chose comme:
OriginalL'auteur Miquel
J'ai un appel de l'objet Compteur qui ressemble fondamentalement ceci:
Avec deux "temps" méthodes pour le calendrier des méthodes qui renvoient à quelque chose et à d'autres méthodes qui sont nuls.
J'ai choisi de renvoyer les exceptions des exceptions d'exécution (comme je ne suis pas un fan de checked exceptions), mais vous pourriez tout aussi bien faire de votre personnalisé MyRunnable interface de lancer des exceptions et il suffit de le rattraper et de re-jeter. Voici une utilisation de la ci-dessus:
Ou ce, dans le retour de la valeur de cas:
J'aime cela parce que mon compteur d'objets peut être exposée au cours de JMX et injecté partout où j'en ai besoin. Vous pourriez faire ce que vous avez demandé à la réflexion, mais je pense que ce serait le désordre (à mon humble avis).
OriginalL'auteur alpian
vous pouvez faire qch comme:
OriginalL'auteur birdy