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

Java如何使用额外类型参数扩展参数化接口?

扩展带Consumer方法的参数化接口,添加额外类型参数

先把原接口的典型写法列出来,方便咱们对照着改:

// 原参数化接口
public interface OriginalInterface<T> {
    // 满足条件时调用consumer,否则返回this支持链式调用
    OriginalInterface<T> when(boolean condition, Consumer<OriginalInterface<T>> consumer);
}

要添加额外类型参数,核心是保住泛型一致性和链式调用的类型安全,具体可以这么操作:

1. 扩展接口的泛型参数列表

把接口的泛型从<T>改成<T, U>,这里的U就是你要加的额外类型参数,如果需要约束类型,还可以加边界,比如U extends SomeBaseType。

2. 同步更新方法的类型签名

方法的返回类型和Consumer的参数类型都要换成扩展后的泛型接口,这样链式调用时才不会丢失新类型的信息:

// 扩展后的参数化接口
public interface ExtendedInterface<T, U> {
    // 返回类型和Consumer参数都同步更新为ExtendedInterface<T, U>
    ExtendedInterface<T, U> when(boolean condition, Consumer<ExtendedInterface<T, U>> consumer);
}

3. 实现类示例(参考)

如果要写实现类,也能完美适配这个扩展后的接口:

public class ExtendedImpl<T, U> implements ExtendedInterface<T, U> {
    private T tValue;
    private U uValue;

    public ExtendedImpl(T tValue, U uValue) {
        this.tValue = tValue;
        this.uValue = uValue;
    }

    @Override
    public ExtendedInterface<T, U> when(boolean condition, Consumer<ExtendedInterface<T, U>> consumer) {
        if (condition) {
            consumer.accept(this);
        }
        return this;
    }

    // 新增类型参数对应的getter/setter
    public T gettValue() { return tValue; }
    public U getuValue() { return uValue; }
}

4. 链式调用使用示例

扩展后链式调用依然丝滑,还能用上新的类型参数:

new ExtendedImpl<String, Integer>("Hello", 2024)
    .when(true, inst -> System.out.println("T类型值:" + inst.gettValue()))
    .when(false, inst -> System.out.println("U类型值:" + inst.getuValue()))
    .when(true, inst -> System.out.println("组合值:" + inst.gettValue() + "-" + inst.getuValue()));

关键提醒

一定要保证方法返回的是当前泛型化的接口实例,不能退回到原始接口类型,不然链式调用时新添加的类型参数信息就丢了,没法正常用U类型的相关功能。

内容的提问来源于stack exchange,提问作者EvenLisle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:02:00