suppose que je dispose de tels extraits de code:
try {
// code I need to wrap to be a helper
long t0 = System.nanoTime();
obj.doSomething(); // a void function
long t1 = System.nanoTime();
Logger.info("doSomthing takes {} nanoseconds", t1-t0);
} catch (IOException ex) {
Logger.error("something wrong happened");
}
// another code
try {
long t0 = System.nanoTime();
obj.doAnotherThing(); // void function
long t1 = System.nanoTime();
Logger.info("doSomthing takes {} nanoseconds", t1-t0);
} catch (IOException ex) {
Logger.error("something wrong happened");
}
3 Réponses :
Essayez d'utiliser des méthodes de réflexion Java. https://docs.oracle.com/javase/tatuutoriel/reflect/ Membre / MéthodeInvocation.html La fonction Wrapper peut prendre la méthode comme entrée dans laquelle la valeur de la méthode est initialisée dans l'appelant. Dans la fonction Wrapper, utilisez une invocation pour appeler la méthode transcédée. p>
L'utilisation de la réflexion est une mauvaise conception logicielle.
Vous pouvez utiliser un Vous pouvez ensuite transmettre la fonction que vous souhaitez exécuter sous forme d'argument à si note strong>: Ce n'est pas une référence appropriée. Voir: Comment puis-je écrire une micro-repère correcte dans Java? P> P> Runnable code>: Timéthis code>: p> obj.dosomething () code> arrive à lancer un ioException code> comme vous avez mentionné ci-dessous, vous pouvez simplement l'attraper Dans le corps du runnable code>: p>
ou Timéthis (obj :: dosomething); code>
Je viens de recevoir une question de suivi, que si DosomThing lancera IoException, comment puis-je utiliser cette aide de Timéthis?
Bien que vous ayez une réponse pertinente pourtant pour une pièce de traitement des exceptions, je vous recommanderais d'utiliser donc, P> deviendra: - p> et maintenant, vous l'utilisez comme ci-dessous: - P> Jool code> bibliothèque à partir de JOOQ code>. Il fournit un ensemble pratique de fonctionnalitéFace code> jusqu'à 16 paramètres. checkeDrunnable code> qui permet de rejeter les exceptions cochées et décochées à rejeter une méthode de sortie pouvant être traitée conformément à votre exigence. strong> try {
timeThis(() -> {
obj.doSomething();
});
} catch (IOException e) {
e.printStackTrace();
}
Qu'avez-vous essayé? Savez-vous comment utiliser Lambdas, puisque vous les avez marqué? Ce serait quoi essayer.
Regardez l'interface fonctionnelle code> exécutable code>