Я пытаюсь написать общую функцию ведения журнала производительности, в которой я могу передать любой метод, на который нужно выполнить синхронизацию, и он будет записывать время выполнения в мою базу данных. У меня это работает в большинстве случаев, но я получаю ошибку компиляции при переходе метода, который возвращает void
:Передача метода void с помощью Callable с использованием Java-дженериков и Java 8 lambda
no instance(s) of type variable(s) T exist so that void conforms to T
Вот мой класс:
public class Performance {
public static <T> T measureExecTime(Callable<T> c, String gid, String name) {
T call = null;
try {
if (Constants.DEBUG) {
Calendar start = Calendar.getInstance();
call = c.call();
Calendar end = Calendar.getInstance();
long diff = end.getTimeInMillis() - start.getTimeInMillis();
// log diff to database
} else {
call = c.call();
}
} catch (Exception e) {
e.printStackTrace();
}
return call;
}
}
А вот как я называю это:
Performance.measureExecTime(() -> myMethod(myMethodParam1, myMethodParam2), "gid", "database_qualifier");
Возможно ли, что эта функциональность ведет себя по методам пустоты, или мне не повезло?