Java中如何设计泛型方法避免代码重复?

问题描述 投票:0回答:1

我的 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();
}

我想避免代码重复并设计一个通用的辅助方法来处理这些情况。这样做的最佳方法是什么?

java generics
1个回答
0
投票

你可以像这样声明一个通用的助手:

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));
}
© www.soinside.com 2019 - 2024. All rights reserved.