2016-01-31 1 views
3

Я пытаюсь выяснить, есть ли способ написать метод, который принимает ссылку на метод Java 8 в качестве входных данных, запускает этот метод и возвращает время это потребовалось для запуска.Написание обобщенного метода ко времени любого другого метода с использованием Java 8 lambdas

public static long time(Runnable c) { 
    long start, end; 
    start = System.currentTimeMillis(); 
    c.run(); 
    end = System.currentTimeMillis(); 
    return (end - start); 
} 

Это то, что я до сих пор, но это будет работать только для метода без параметров ... Я искал что-то, что может работать с методом, который может принимать параметры, а также. Это возможно?

+2

В качестве побочного сведению, если вы собираетесь иметь это сделать микро-тесты, то вы бы лучше обучения рамки бенчмаркинга как JMH. – Tunaki

+2

Я действительно надеюсь, что вы не собираетесь использовать это для бенчмаркинга. –

+0

@BrianGoetz Да, я намерен использовать это для бенчмаркинга. Не могли бы вы объяснить, в чем проблема с этим? ... – kxirog

ответ

6

Ну, работа вокруг, чтобы обернуть ваш метод внутри лямбда

int foo =... 
Object bar = ... 

long elapsed = time(() -> myMethod(foo, bar)); 
+1

Спасибо! Это именно то, что я искал – kxirog