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

如何让泛型方法返回对应泛型子类的value()方法类型?

泛型方法返回类型匹配解决方案

你有如下抽象类及实现类:

abstract class A<S> {
    abstract S value();
}

class B extends A<Integer> {
  @Override
  Integer value() {
    return 10;
  }
}

class C extends A<String> {
  @Override
  String value() {
    return "Hello";
  }
}

想要定义getValue方法,使得调用getValue(new B())时返回Integer类型,调用getValue(new C())时返回String类型,之前尝试的写法无法正确访问A的泛型参数S,正确实现方式有两种:

方式一:直接绑定泛型参数S

<S> S getValue(A<S> object) {
    return object.value();
}

方式二:保留T泛型并关联S

<S, T extends A<S>> S getValue(T object) {
    return object.value();
}

说明

之前U extends A.S的写法错误,因为S是A的泛型参数,不是内部类或成员,不能通过A.S访问。上述两种写法都明确了泛型S和A的关联,编译器可以根据传入的具体实现类(B或C)自动推断出返回类型,调用时无需额外指定泛型,就能得到正确的返回值类型:

Integer num = getValue(new B()); // 自动推断返回Integer
String str = getValue(new C()); // 自动推断返回String

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 05:31:18