我的 Java 代码中有几个方法(大约 10 个)具有相似的结构,但返回类型、方法参数和它们调用的特定方法不同 (
someMethod()
)。一个例子是:
private int f1(int t) {
AtomicReference<Integer> res = new AtomicReference<>();
res.set(someMethod1(t));
// ...
return res.get();
}
private int f2(String text) {
AtomicReference<Integer> res = new AtomicReference<>();
res.set(someMethod2(text));
// ...
return res.get();
}
private float f3(float x, float y) {
AtomicReference<Float> res = new AtomicReference<>();
res.set(someMethod3(x, y));
// ...
return res.get();
}
private float f4() {
AtomicReference<Float> res = new AtomicReference<>();
res.set(someMethod4());
// ...
return res.get();
}
我想避免代码重复并设计一个通用的辅助方法来处理这些情况。这样做的最佳方法是什么?
你可以像这样声明一个通用的助手:
private <T> T helper(Supplier<T> method) {
AtomicReference<T> res = new AtomicReference<>();
res.set(method.get());
// ...
return res.get();
}
需要一个
Supplier<T>
,代表你要调用的方法。该方法的参数将在调用方捕获。
例如,
f1
可以这样使用helper
来声明:
private int f1(int t) {
return helper(() -> someMethod1(t));
}
f3
的另一个例子,
private float f1(float x, float y) {
return helper(() -> someMethod3(x, y));
}