在Java中是否可以创建一个对输入法进行计时的方法?

在Java中是否可以创建一个对输入法进行计时的方法?,java,time,reference,Java,Time,Reference,在Java中,是否可以通过引用创建一个与另一个方法相乘的方法 我在想这样的事情: int timeMethod(method myMethod) { long start = time run myMethod long end = time return end-start } 您可以使用System.currentTimeMillis()作为开始,在方法结束时也这样做,然后减去你提到的两个 public void

在Java中,是否可以通过引用创建一个与另一个方法相乘的方法

我在想这样的事情:

  int timeMethod(method myMethod) {
        long start = time
        run myMethod
        long end = time
        return end-start
     }

您可以使用
System.currentTimeMillis()作为开始,在方法结束时也这样做,然后减去你提到的两个

public void timeExtensiveMethod() {
    long start = System.currentTimeMillis();
    //do stuff 
    long end = System.currentTimeMillis();
    System.out.println("Time taken: " + (end - start));
}

请注意,上面的变量并非都是必需的,它们只是用来显示思维过程。

您可以使用
System.currentTimeMillis()作为开始,在方法结束时也这样做,然后减去你提到的两个

public void timeExtensiveMethod() {
    long start = System.currentTimeMillis();
    //do stuff 
    long end = System.currentTimeMillis();
    System.out.println("Time taken: " + (end - start));
}

请注意,并非所有上述变量都是必需的,它们只是用来显示思维过程。

AOP(aspectJ实现)是您尝试重新发明的,描述示例的快速谷歌链接是您尝试重新发明的吗,是描述示例的快速google链接吗

否在java中不能将方法作为参数传递

否在java中不能将方法作为参数传递

在java中没有函数指针(至少不是确切的函数指针)。你可以尝试这样的组合:

int timeMethod(MyClass object) {
        long start = System.currentTimeMillis();
        object.run();  //this class can implement a common interface and you program to interface not concrete implementation
        long duration = System.currentTimeMillis() - start;
        return duration;
     }

编辑:+1对于AOP

在Java中没有函数指针(至少不是精确的函数指针)。你可以尝试这样的组合:

int timeMethod(MyClass object) {
        long start = System.currentTimeMillis();
        object.run();  //this class can implement a common interface and you program to interface not concrete implementation
        long duration = System.currentTimeMillis() - start;
        return duration;
     }

编辑:+1对于AOP

是的,这是可能的,但是我认为您应该使用真正的分析器,而不是这样一个“愚蠢”的分析器

您必须使用来调用该方法和/或测量经过的时间:

long measureMethodExecutionTime(Method method, Object object, Object[] args) {
    long startTime = System.currentTimeMillis();

    method.invoke(object, args);

    return System.currentTimeMillis() - startTime;
}

是的,这是可能的,但是我相信你应该使用一个真正的分析器,而不是这样一个“愚蠢”的分析器

您必须使用来调用该方法和/或测量经过的时间:

long measureMethodExecutionTime(Method method, Object object, Object[] args) {
    long startTime = System.currentTimeMillis();

    method.invoke(object, args);

    return System.currentTimeMillis() - startTime;
}

您可以将方法调用包装在
Runnable
中,以及
Runnable
运行所需的时间:

long timeMethod(Runnable myMethodRunner) {
    long start = System.nanoTime();
    myMethodRunner.run();
    return System.nanoTime() - start;
}
然后,您可以按如下方式确定方法的时间:

public void myMethod(...) {
    . . .
}

// later:

long timeInNanoSeconds = timeMethod(new Runnable() {
    public void run() {
        myMethod(...);
    }
});

您可以将方法调用包装在
Runnable
中,以及
Runnable
运行所需的时间:

long timeMethod(Runnable myMethodRunner) {
    long start = System.nanoTime();
    myMethodRunner.run();
    return System.nanoTime() - start;
}
然后,您可以按如下方式确定方法的时间:

public void myMethod(...) {
    . . .
}

// later:

long timeInNanoSeconds = timeMethod(new Runnable() {
    public void run() {
        myMethod(...);
    }
});

谢谢你的回复。我将尝试这些解决方案,然后选出最好的。另外,感谢jigar joshi对我的问题进行格式化。我不明白为什么我的4个空间不工作。我听起来像是奥斯卡奖得主,哈哈。你的4个空格不起作用,因为你需要在代码前后都有一个空行。可能是重复的。谢谢你的回复。我将尝试这些解决方案,然后选出最好的。另外,感谢jigar joshi对我的问题进行格式化。我不明白为什么我的4个空间不工作。我听起来像奥斯卡奖得主,哈哈。你的4个空格不起作用,因为你需要在代码前后都有一个空行。可能是重复的