Sch*_*ute 2 java code-duplication
我有一个调用外部 API 的 Java 程序(RealApi在下面的代码中),有时我想避免调用这个 API,而是返回预先构造的响应(由 生成FakeApi)。
所以,我最终在我的大多数方法中复制了这种结构:
public Type1 m1(String s) {
try {
Type1 r = FakeApi.m1(s);
if (r != null) {
return r;
}
} catch (Exception e) {
// log error
}
return RealApi.m1(s);
}
Run Code Online (Sandbox Code Playgroud)
有哪些选项可以避免在任何地方复制这个 try/catch 块?重要的是,如果FakeApi抛出异常或返回 null,则RealApi必须调用 。
一种选择是将错误检查行为封装到它自己的方法中:
public <T> T fakeOrReal(Supplier<T> fake, Supplier<T> real) {
try {
T r = fake.get();
if (r != null) {
return r;
}
}
catch (Exception e) {
// log error
}
return real.get();
}
Run Code Online (Sandbox Code Playgroud)
然后你可以调用它
public Type1 m1(String s) {
return fakeOrReal(() -> FakeApi.m1(s), () -> RealApi.m1(s));
}
Run Code Online (Sandbox Code Playgroud)