6
votes

Comment puis-je envelopper cela comme une fonction d'assistance?

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");
}


2 commentaires

Qu'avez-vous essayé? Savez-vous comment utiliser Lambdas, puisque vous les avez marqué? Ce serait quoi essayer.


Regardez l'interface fonctionnelle exécutable


3 Réponses :


-3
votes

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.


1 commentaires

L'utilisation de la réflexion est une mauvaise conception logicielle.



6
votes

Vous pouvez utiliser un Runnable : xxx

Vous pouvez ensuite transmettre la fonction que vous souhaitez exécuter sous forme d'argument à Timéthis : xxx

si obj.dosomething () arrive à lancer un ioException comme vous avez mentionné ci-dessous, vous pouvez simplement l'attraper Dans le corps du runnable : xxx

note : Ce n'est pas une référence appropriée. Voir: Comment puis-je écrire une micro-repère correcte dans Java?


2 commentaires

ou Timéthis (obj :: dosomething);


Je viens de recevoir une question de suivi, que si DosomThing lancera IoException, comment puis-je utiliser cette aide de Timéthis?



0
votes

Bien que vous ayez une réponse pertinente pourtant pour une pièce de traitement des exceptions, je vous recommanderais d'utiliser Jool code> bibliothèque à partir de JOOQ code>. Il fournit un ensemble pratique de fonctionnalitéFace code> jusqu'à 16 paramètres. Il fournit également 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>

donc, P> xxx pré>

deviendra: - p> xxx pré>

et maintenant, vous l'utilisez comme ci-dessous: - P>

try {
    timeThis(() -> {
        obj.doSomething();
   });
  } catch (IOException e) {
        e.printStackTrace();
  }


0 commentaires