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

如何在父类中定义始终指向子类的泛型类型?

解决方案:用自限定泛型实现父类指向子类类型

当然可以实现!这在Java里典型的解决方式就是用自限定泛型(self-bounded generics),刚好能满足你想要父类方法返回子类类型的需求。

第一步:修改抽象父类,引入自限定泛型

给父类添加一个泛型参数,并通过约束让它绑定到子类本身:

public abstract class MySuperclass<T extends MySuperclass<T>> {
    public abstract T getInstance();
}

这里的T extends MySuperclass<T>是核心逻辑:它要求泛型参数T必须是MySuperclass的子类,同时这个子类必须把自己作为泛型参数传递给父类。这样父类的getInstance()方法就可以直接返回T类型——也就是你想要的子类类型。

第二步:子类实现时指定自身为泛型参数

创建子类的时候,把自己作为泛型参数传给父类,然后重写getInstance()方法时就能直接返回当前子类的类型:

public class FirstSubclass extends MySuperclass<FirstSubclass> {
    @Override
    public FirstSubclass getInstance() {
        return new FirstSubclass(); // 这里可以替换成你需要的实例化逻辑
    }
}

验证通用性

再创建另一个子类试试,同样的逻辑完全适用:

public class SecondSubclass extends MySuperclass<SecondSubclass> {
    @Override
    public SecondSubclass getInstance() {
        return new SecondSubclass();
    }
}

使用效果

当你使用父类引用指向子类实例时,调用getInstance()不需要强制转换就能直接得到子类类型,完全符合你的需求:

MySuperclass<FirstSubclass> obj = new FirstSubclass();
FirstSubclass instance = obj.getInstance(); // 无编译警告,直接获取子类类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:02:51