如何在Java中设计泛型辅助方法以避免代码重复?
泛型辅助方法+函数式接口解决代码重复问题
核心思路是把所有方法里的公共逻辑(AtomicReference的创建、赋值、中间通用处理、返回结果)抽成一个泛型辅助方法,而把每个方法独有的「调用具体someMethod」逻辑用函数式接口(比如Supplier<T>)封装,通过Lambda表达式传入辅助方法。
实现步骤:
- 编写泛型辅助方法,处理所有重复逻辑:
private <T> T processWithAtomic(Supplier<T> action) { AtomicReference<T> res = new AtomicReference<>(); res.set(action.get()); // 执行传入的具体方法调用 // 这里放所有方法里重复的//...代码,比如日志、公共校验、状态更新等 return res.get(); }
- 改造原有方法,用Lambda封装具体的someMethod调用:
private int f1(int t) { return processWithAtomic(() -> someMethod1(t)); } private int f2(String text) { return processWithAtomic(() -> someMethod2(text)); } private float f3(float x, float y) { return processWithAtomic(() -> someMethod3(x, y)); } private float f4() { return processWithAtomic(() -> someMethod4()); }
方案优势:
- 完全消除重复代码:所有公共逻辑只在辅助方法里维护,后续新增类似方法只需一行Lambda调用
- 适配任意返回类型:泛型
<T>支持int、float、自定义对象等所有返回类型 - 兼容带参/无参方法:Lambda可以捕获外部参数(比如
t、x、y),把带参的someMethod调用转换成Supplier<T>需要的无参形式 - 扩展性强:如果后续公共逻辑需要修改,只需改动辅助方法一处即可
内容的提问来源于stack exchange,提问作者Abdo21
相关产品推荐
相关产品推荐

