java泛型

最近,在项目中由于一个接口要适配多个不同场景的调用,所以导致这个接口的出参与入参都不可确定,需要用到泛型,这里简单记录一下我的用法。

泛型的用法分为泛型类,泛型接口,泛型方法。

1、泛型类

由于项目中过多的设计分页查询,所以,写了一个泛型类,这个对象中包含一个分页信息对象,一个查询条件泛型对象,用来接收不同的查询条件

2、泛型接口

不同的业务场景都需要调用这个接口,而且不同场景的入参与出参都有所差异,写一个泛型接口,不同场景实现类,实现这个接口,给定不同出参与入参

3、泛型方法

泛型方法,平时用的比较少,这里举一个类型匹配的方法例子。实际开发中,可以套用根据不同对象类型做不同逻辑处理的场景。

总结:

(1)为什么使用泛型

事先并不确定具体类型,或者需要一个接口,方法,字段适配多种不同的情况下使用

(2)有什么好处

在没有使用泛型开发之前,使用Object来表示通用类型,但是使用Object需要进行强制转换,使用很麻烦,并且强制转换并不会进行编译检查,运行期间容易抛出类型转换异常错误。使用泛型不用进行强转,编译期间也会检查类型,更加方便,安全。

(3)需要注意的一点

接口泛型,一个虚拟类实现这个接口中的某几个方法,没有实现的方法中如果包含泛型,那么虚拟类的命名上需要标注泛型,等待其子类实现这个泛型

 

虚拟类中未确定的泛型,在其子类中实现确定,写法如上。

(4)如果controller层接口入参对象中包含泛型,不进行json转换会报错误

入参对象:

controller接口:

service接口:

报错:

java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to com.utry.ucsc.task.vo.TaskOrderDetailsReq

 

service代码修改:

T t = req.getT();

JSONObject jsonObject = (JSONObject)t;

TaskOrderDetailsReq taskOrderDetailsReq = JSONObject.toJavaObject(jsonObject, TaskOrderDetailsReq.class);

return taskService.getOrderTaskDetails((T) taskOrderDetailsReq)

泛型对象先进行json转换,然后塞入方法,如果泛型对象中嵌套泛型对象,则还需要进一步对最里面的泛型对象进行json转换。

如果泛型对象是个list集合,则用 jsonArray.toJavaList 进行json转换

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值