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

Java中泛型T使用Getter时为何返回Object类型?

问题原因及解决方案

问题出在两个地方:

  • 调用端使用了原始类型:创建ValueDto实例时没有指定泛型参数,编译器无法识别T的具体类型,生成的是原始类型对象,getValue()自然返回Object。另外原代码里的.key("1234")是笔误,DTO类的字段是keySet,得改成.keySet("1234")。
  • 服务方法泛型未与参数绑定:方法声明的<T>是独立泛型,参数ValueDto是原始类型,两者没有关联,导致getValue()无法返回指定的T类型。

修复代码:

1. 调用端修正(指定泛型)

// 显式指定泛型,或让编译器自动推断
ValueDto<AnotherDto> valueDto = ValueDto.builder()
        .keySet("1234") // 修正字段名错误
        .value(anotherDto)
        .build();

service.dtoTest(valueDto);

2. 服务端方法修正(绑定泛型)

public <T> void dtoTest(@Valid ValueDto<T> valueDto) {
    Test test = new Test();
    test.saveKey(valueDto.getKeySet(), valueDto.getValue());
}

这样valueDto.getValue()就会返回泛型T类型,而非Object。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 06:13:15