Есть 2 функции, которые имеют одинаковый кусок кода, за исключением одной строки.
public ResponseEntity<String> deleteJob(String jobName, String jobGroup) throws SchedulerException {
JobKey jobKey = JobKey.jobKey(jobGroup, jobName);
if (!schedulerFactoryBean.getScheduler().checkExists(jobKey))
return new ResponseEntity<>(format(JOBNAME_JOBGROUP_COMMON_LOG.concat("does not exists"), jobName, jobGroup), HttpStatus.BAD_REQUEST);
schedulerFactoryBean.getScheduler().deleteJob(jobKey);//Different Code line
return new ResponseEntity<>(format(JOBNAME_JOBGROUP_COMMON_LOG.concat("deleted Successfully"), jobName, jobGroup), HttpStatus.OK);
}
public ResponseEntity<String> resumeJob(String jobName, String jobGroup) throws SchedulerException {
JobKey jobKey = JobKey.jobKey(jobGroup, jobName);
if (!schedulerFactoryBean.getScheduler().checkExists(jobKey))
return new ResponseEntity<>(format(JOBNAME_JOBGROUP_COMMON_LOG.concat("does not exists"), jobName, jobGroup), HttpStatus.BAD_REQUEST);
schedulerFactoryBean.getScheduler().resumeJob(jobKey);//Different Code line
return new ResponseEntity<>(format(JOBNAME_JOBGROUP_COMMON_LOG.concat("deleted Successfully"), jobName, jobGroup), HttpStatus.OK);
}
Я хочу удалить дублирующийся код из обеих функций.
Простое решение будет написать третью общую функцию и вызвать ее из обеих функций. Как бы я ни искал, есть ли способ, я мог бы использовать лямбда-выражение для передачи функциональности кода, которая отличается.
Что-то вроде
public ResponseEntity<String> processJob(String jobName, String jobGroup, Function<String,String> jobfunction) {
JobKey jobKey = JobKey.jobKey(jobGroup, jobName);
if (!schedulerFactoryBean.getScheduler().checkExists(jobKey))
return new ResponseEntity<>(format(JOBNAME_JOBGROUP_COMMON_LOG.concat("does not exists"), jobName, jobGroup), HttpStatus.BAD_REQUEST);
jobfunction.apply(jobKey);//Apply the required code behaviour
return new ResponseEntity<>(format(JOBNAME_JOBGROUP_COMMON_LOG.concat("deleted Successfully"), jobName, jobGroup), HttpStatus.OK);
}
, а затем вызвать функцию как
processJob(jobName,jobGroup, <lambda expression with delete/resume function calling>)