记List<Object>接受其他泛型入参报错及List、 List<Object>、 List<?>三者的区别

1.问题

这是我自定义的一个数据传输模型,使用List < Object>作为入参将结果返回到前台

@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
@ApiModel(description = "自定义返回数据类型")
public class SimpleResponseBody {
    @ApiModelProperty(name = "status",value = "状态码")
    protected String status;
    @ApiModelProperty(name = "message",value = "自定义状态信息")
    protected String message;
    @ApiModelProperty(name = "count",value = "返回结果条数")
    @JsonProperty("stuInfoCount")
    protected int count;
    @ApiModelProperty(name = "results",value = "返回结果")
    protected List<Object> results;

    public static SimpleResponseBody success(List<Object> results){
        return new SimpleResponseBody().setStatus("0000").setMessage("操作成功").setCount(results.size()).setResults(results);
    }

    public static SimpleResponseBody error(){
        return new SimpleResponseBody().setStatus("1111").setMessage("操作失败").setCount(0).setResults(null);
    }
}

Controller—这里代码其实市报错的,

public SimpleResponseBody getStuInfo(@PathVariable("word") String word){
        List<StuInfo> stuInfoList = stuInfoDao.findStuByNameOrNo(word);
        return SimpleResponseBody.success(stuInfoList);
    }

运行报错信息
第一次看见感觉很扯。子类无法被转换为父类。。。

Error:(30, 65) java: 不兼容的类型: java.util.List<com.example.cque.entity.StuInfo>无法转换为java.util.List<java.lang.Object>

其实编译器会给出一种解决方案:

public SimpleResponseBody getStuInfo(@PathVariable("word") String word){
        List<StuInfo> stuInfoList = stuInfoDao.findStuByNameOrNo(word);
        return SimpleResponseBody.success(Collections.singletonList(stuInfoList));
    }

这个方法主要用于只有一个元素的优化,减少内存分配,无需分配额外的内存,因此可以做到内存分配最小化,相比之下ArrayList的DEFAULT_CAPACITY=10个。
在这里插入图片描述
看到返回结果的results的list中还有个list,也是使用这个方法带来的弊端,不是我想要的结果,所以继续找解决方法。

2.List、 List、 List<?>三者的区别

List :完全没有类型限制和赋值限定。
List< Object> :看似用法与List一样,但是在接受其他泛型赋值时会出现编译错误
List< ?>:是一个泛型,在没有赋值前,表示可以接受任何类型的集合赋值,但赋值之后不能往里面随便添加元素,但可以remove和clear,并非immutable(不可变)集合。List<?>一般作为参数来接收外部集合,或者返回一个具体元素类型的集合,也称为通配符集合

解决办法
使用List<?>接受入参,就不会报错,而且返回的也是我想要的结果了。
在这里插入图片描述

记得点赞加关注!!!

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值