如何简化Java静态方法中重复使用的泛型(JDK8环境)
简化JDK8下静态方法重复泛型声明的方案
在JDK8中,类级别的泛型参数无法在静态方法中直接复用(静态成员不属于类的实例,类泛型仅作用于实例上下文),针对你这种多个静态方法共享完全相同泛型参数的场景,可以通过静态内部泛型辅助类的方式简化重复的泛型声明,具体实现如下:
方案:使用静态内部泛型辅助类
将共享的泛型参数提取到一个静态内部类中,把原本的工具方法转移到这个辅助类里,再通过一个入口方法返回辅助类实例,这样只需在入口处指定一次泛型参数,即可调用所有相关方法:
public final class SomeUtils { // 私有构造,禁止实例化工具类 private SomeUtils() {} // 静态泛型辅助类,承载共享的泛型参数 public static class Helper<REQUEST extends RequestClass, RESPONSE> { private Helper() {} public ReturnClassA<REQUEST, RESPONSE> funcA() { // 原funcA的实现逻辑 return ...; } public ReturnClassB<REQUEST, RESPONSE> funcB() { // 原funcB的实现逻辑 return ...; } public ReturnClassC<REQUEST, RESPONSE> funcC() { // 原funcC的实现逻辑 return ...; } } // 入口方法,指定泛型后返回辅助类实例 public static <REQUEST extends RequestClass, RESPONSE> Helper<REQUEST, RESPONSE> withTypes() { return new Helper<>(); } }
调用示例
现在调用工具方法时,只需在withTypes方法处指定一次泛型参数,即可链式调用所有方法:
// 仅需一次泛型声明,即可调用funcA/funcB/funcC SomeUtils.withTypes<MyRequestImpl, MyResponseImpl>().funcA(); SomeUtils.withTypes<MyRequestImpl, MyResponseImpl>().funcB();
其他说明
由于JDK8本身的语法限制,无法直接让多个静态方法共享类级别的泛型参数,上述辅助类方案是最常用的折中手段,既避免了重复编写泛型声明,又保持了工具类的静态调用风格。
内容的提问来源于stack exchange,提问作者Himank Jog
相关产品推荐
相关产品推荐

