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>