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
相关产品推荐
相关产品推荐

