问题描述
我有以下界面:
import org.springframework.batch.core.Job;
public interface LateBindingJobSupplier {
Job get() throws Exception;
}
SonarLint抱怨我声明它引发Exception而不是定义专用异常。
我可以定义一个自定义的异常类,但是这给接口的用户增加了包装它们生成的异常的负担。
因此,用户不能执行以下操作:
public Step someOtherJobStep(
StepBuilderFactory steps,Supplier<JobRegistry> jobRegistrySupplier,@Qualifier("someOtherJobParameterExtractor") JobParametersExtractor parametersExtractor
) {
JobRegistry jobRegistry = jobRegistrySupplier.get();
return steps.get("mystep")
.job(new LateBindingJobProxy(()-> jobRegistry.getJob("someOtherJob"))
.parameterExtractor(parameterExtractor)
;
}
他们最终不得不包装可能的异常:
public Step someOtherJobStep(
StepBuilderFactory steps,@Qualifier("someOtherJobParameterExtractor") JobParametersExtractor parametersExtractor
) {
JobRegistry jobRegistry = jobRegistrySupplier.get();
return steps.get("mystep")
.job(new LateBindingJobProxy(
()-> {
try {
jobRegistry.getJob("someOtherJob");
}
catch(NoSuchJobException e) {
throw new LateBindingJobSupplierException(e);
}
}
)
.parameterExtractor(parameterExtractor)
;
}
第二种方法看起来比较丑陋,我不确定它真的能买到什么。我可以在LateBindingJobProxy类中捕获该异常,并将其包装在那里。
我的分析中有什么要忽略的吗?拥有API的优点和缺点(或者这是SPI?有时,差异对我来说是模糊的),它允许调用者使用通用异常,而不是要求它们将异常包装在特定于API的自定义中
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)