泛型通配符

469 阅读1分钟

泛型通配符说明

  • ? 表示不确定的java类型。
  • T 表示java类型。
  • K V 分别代表java键值中的Key Value。
  • E 代表Element。

Object和泛型通配符区别? Object是所有类的根类,是具体的一个类,使用的时候可能需要类型强制转换的,但是用通配符 ?、T 、K 、V、 E 等这些的话,在实际用之前类型就已经确定了,不需要强制转换。

T 是固定的一种泛型,? 是只要是Object类的子类都可以,换言之,任何类都可以,因为Object是所有类的根基类。

比如:Interge,String就是<T extends Collection>,固定的泛型指类型是固定的T; <? extends Collection> 这里 ? 代表一个未知的类型, 但是,这个未知的类型实际上是Collection的一个子类,Collection是这个通配符的上限。

使用实例:

  1. 制定特定范型的实体类 <T> T

//如 JSONObject 的实体类转换方法
public static <T> T parseObject(String text, Class<T> clazz) {
    return parseObject(text, clazz);
}
  1. 指定包含特定范型的特定范型的实体类 <T> MessageInfo<T>

//实例如下
public class MessageInfo<T> {
    private TeldHeader teldHeader;
    private T Payload;
}

public static <T> MessageInfo<T> receiveMsgDto(Message message, Class<T> cls){
    //处理报文体内容
    T t = JSONObject.parseObject(dealMsgBody(message), cls);
    //处理报文头
    TeldHeader teldHeader = dealMsgHeader(message);

    return new MessageInfo<>(teldHeader,t);
}