gpt4 book ai didi

java - Java 8 中的功能接口(interface)(方法执行时间记录器)

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:46:14 25 4
gpt4 key购买 nike

我有两种方法:

class C1
{

void m1() {//does sth}

void m2(int x1, int x2) {//does sth}

}

//记录任意方法所花费的时间

 logMethodExecTime(m1);
logMethodExecTime(m2);

不确定如何使用 JDK8 功能接口(interface)和方法引用来为方法“logMethodExecTime”定义正确的语法?

以下无效:

class Utils
{
public static void logMethodExecTime(Supplier<Void> s)
{
long start = System.nanoTime();
s.get();
long end = System.nanoTime();
System.out.println(((end-start)/1000000000d) + " secs");
}
}

和调用:

      C1 c = new C1();  
Utils.logMethodExecTime(c::m1);

//Also how can we have one single definition of 'logMethodExecTime'
//to accept any method with any number of args
Utils.logMethodExecTime(c::m2);

最佳答案

而不是 Supplier<Void>你应该使用普通的 Runnable ,而不是坚持方法引用,你需要一个包含方法调用的显式 lambda,捕获它需要的任何参数。例如:

logMethodExecTime(() -> m2(17, 37));

请注意,lambda 不一定只是单个方法调用。这使您可以更灵活地衡量您可以测量的内容。

关于java - Java 8 中的功能接口(interface)(方法执行时间记录器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29065764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com