You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建兼容两个相似接口的成员?合并同类类的优雅方案

优雅合并ClassC与ClassD的方案

1. 重构泛型统一接口

先消除InterfaceA和InterfaceB的重复定义,替换为一个泛型接口:

public interface VariationProvider<T> {
    T getVariation();
}

让原有实现类分别实现这个泛型接口:

public class InterfaceAImpl implements VariationProvider<VariationA> {
    @Override
    public VariationA getVariation() {
        // 原InterfaceAImpl的业务逻辑
        return new VariationA();
    }
}

public class InterfaceBImpl implements VariationProvider<VariationB> {
    @Override
    public VariationB getVariation() {
        // 原InterfaceBImpl的业务逻辑
        return new VariationB();
    }
}

2. 泛型化目标类

将ClassC和ClassD合并为一个泛型类,结合Spring依赖注入处理不同实现,用Lombok简化代码:

import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

@Component
@Getter
@RequiredArgsConstructor
public class UnifiedClass<T> {
    private final VariationProvider<T> variationProvider;

    // 原ClassC和ClassD的所有公共功能方法都放在这里
    public void commonBusinessLogic() {
        T variation = variationProvider.getVariation();
        // 统一的业务处理逻辑
    }
}

3. 按需注入使用

在需要原ClassC/ClassD功能的地方,通过Spring注入指定泛型的实例,用@Qualifier区分不同实现:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

@Component
public class BusinessService {
    private final UnifiedClass<VariationA> classCEquivalent;
    private final UnifiedClass<VariationB> classDEquivalent;

    @Autowired
    public BusinessService(
            @Qualifier("interfaceAImpl") VariationProvider<VariationA> providerA,
            @Qualifier("interfaceBImpl") VariationProvider<VariationB> providerB
    ) {
        this.classCEquivalent = new UnifiedClass<>(providerA);
        this.classDEquivalent = new UnifiedClass<>(providerB);
    }

    public void execute() {
        classCEquivalent.commonBusinessLogic();
        classDEquivalent.commonBusinessLogic();
    }
}

这种方案通过泛型抽象消除重复类,利用Spring依赖注入解耦不同实现,再借助Lombok减少样板代码,完全保留原有功能的同时实现了代码复用。

内容的提问来源于stack exchange,提问作者תומר ש

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 03:52:12