002、Java泛型

1. Java常用泛型通配符 T,E,K,V,?

1.1 参考
https://blog.csdn.net/weixin_52772307/article/details/126868855
在这里插入图片描述
https://cloud.tencent.com/developer/article/1353549
https://segmentfault.com/a/1190000023020690
https://blog.csdn.net/u012060033/article/details/87346857

public class Test {
    public static void main(String[] args) {
        //不指定泛型的时候
        int a1 = add(1, 2); //这两个参数都是Integer,所以T为Integer类型
        Number b1 = add(1, 1.2);//这两个参数一个是Integer,一个Float,所以取同一父类的最小级,为Number
        Object c1 = add(1, "my");//这两个参数一个是Integer,一个Float,所以取同一父类的最小级,为Object
        //指定泛型的时候
        int a = Test.<Integer>add(1, 2);//指定了Integer,所以只能为Integer类型或者其子类
        // int b = Test.<Integer>add(1, 2.2);//编译错误,指定了Integer,不能为Float
        Number c = Test.<Number>add(1, 2.2); //指定为Number,所以可以为Integer和Float
        System.out.println(a1);
        System.out.println(b1);
        System.out.println(c1);
        System.out.println(a);
        System.out.println(c);
    }

    //这是一个简单的泛型方法
    public static <T> T add(T x, T y) {
        return y;
    }

在这里插入图片描述

1.2 常用的 T,E,K,V,?

在这里插入图片描述
本质上这些个都是通配符,没啥区别,只不过是编码时的一种约定俗成的东西。比如上述代码中的 T ,我们可以换成 A-Z 之间的任何一个 字母都可以,并不会影响程序的正常运行,但是如果换成其他的字母代替 T ,在可读性上可能会弱一些。通常情况下,T,E,K,V,?是这样约定的:

  • ?表示不确定的 java 类型
  • T (type) 表示具体的一个java类型
  • K V (key value) 分别代表java键值中的Key Value
  • E (element) 代表Element

2. 项目实战

2.1 两个不同的对象调用相同的方法,分别改变对象中相同属性值

对象   MsgList4AllFirstTypeResp    MsgList4AllSecondTypeResp
相同的属性 msgShowTime
调用相同的方法 setMsgShowTime(对象)

被调用方法(使用泛型实现避免代码冗余)

/**
 * 消息显示时间:未超过60min【xx分钟前】,超过60min按【xx小时前】、超过24h按【xx天前】
 *
 * @param t
 */
private <T> void setMsgShowTime(T t) {

    if (t instanceof MsgList4AllFirstTypeResp) {
        MsgList4AllFirstTypeResp item = (MsgList4AllFirstTypeResp) t;
        Date end = new Date();
        Date gmtCreate = item.getGmtCreate();
        String msgShowTime = DateUtil.calcMsgShowTime(end, gmtCreate);
        item.setMsgShowTime(msgShowTime);

    } else if (t instanceof MsgList4AllSecondTypeResp) {
        MsgList4AllSecondTypeResp item = (MsgList4AllSecondTypeResp) t;
        Date end = new Date();
        Date gmtCreate = item.getGmtCreate();
        String msgShowTime = DateUtil.calcMsgShowTime(end, gmtCreate);
        item.setMsgShowTime(msgShowTime);
    }
}

调用方代码1

@Override
public List<MsgList4AllFirstTypeResp> msgList4AllFirstType() {

    String userCode = UserUtil.getLoginUser().getUserCode();
    List<MsgList4AllFirstTypeResp> list = baseMapper.msgList4AllFirstType(userCode);
    if (CollectionUtils.isEmpty(list)) {
        return list;
    }
    list.stream().forEach(item -> {
        setMsgCountColor(item);
        setMsgShowTime(item);
    });
    return list;
}

调用方代码2

@Override
public List<MsgList4AllSecondTypeResp> msgList4AllSecondType(Long msgFirstTypeId) {

    String userCode = UserUtil.getLoginUser().getUserCode();
    List<MsgList4AllSecondTypeResp> list = baseMapper.msgList4AllSecondType(userCode, msgFirstTypeId);
    if (CollectionUtils.isEmpty(list)) {
        return list;
    }
    list.stream().forEach(item -> {
        setMsgShowTime(item);
        setMsgReadStatus(item);
    });
    return list;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟空编程2016

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值