Java泛型中的标记符含义:
本质上这些个都是通配符,没啥区别,只不过是编码时的一种约定俗成的东西。比如上述代码中的 T ,我们可以换成 A-Z 之间的任何一个 字母都可以,并不会影响程序的正常运行,但是如果换成其他的字母代替 T ,在可读性上可能会弱一些。通常情况下,T,E,K,V,? 是这样约定的:
E - Element (在集合中使用,因为集合中存放的是元素)T - Type(Java 类),T代表在调用时的指定类型。会进行类型推断。声明泛型类或泛型方法。K - Key(键)V - Value(值)N - Number(数值类型)? - 表示不确定的java类型,是类型通配符,代表所有类型。?不会进行类型推断。使用泛型类或泛型方法
泛型类定义
// 紧跟类名后面
public class Test{}
泛型方法定义
//紧跟修饰符后面(public),并且返回类型为T
publicT Test1(T t){}
//紧跟关键字后面(static)
public staticboolean isOrNot(T t){}
?通配符使用
// 变量赋值或变量声明时候使用
List> list;
List extends Number> uNumberList;
List super Integer> intgerList;
注:List extends T>和List super T>有什么区别
List extends T>可以接受任何继承自T的类型的List,List super T>可以接受任何T的父类构成的List。例如List extends Number>可以接受List ? 和 T 的区别 ?和 T 都表示不确定的类型,区别在于我们可以对 T 进行操作,但是对 ? 不行,比如如下这种 : 简单总结下: T 是一个 确定的 类型,通常用于泛型类和泛型方法的定义,?是一个 不确定 的类型,通常用于泛型方法的调用代码和形参,不能用于定义类和泛型方法。 好文来源:链接:https://juejin.cn/post/6844903917835419661
// 指定集合元素只能是 T 类型
List
// 集合元素可以是任意类型,这种没有意义,一般是方法中,只是为了说明用法
List> list = new ArrayList>();
// 可以
T t = operate();
// 不可以
? car = operate();
// 不可以
isOrNot(Map
public static boolean isOrNot(Map
return map.get("String");
}



