java中T表示泛型。?表示不确定的类型。
jdk使用K表示键,V表示值,T表示type类型,E表示enum枚举。这四个符号只是表示泛型名称,可以换成其他字母,但是需要在之前声明。
参考文章:java泛型:T与?的使用及区别_java map ? 和t用法-CSDN博客
示例代码如下:
- package javaCode;
-
- import java.util.HashMap;
- import java.util.List;
- import java.util.ArrayList;
-
- public class Test
{ - public static void main(String[] args) {
- System.out.println(new Test<>().getT1());
- System.out.println(new Test<>().getT2());
- // T1, T2在new的时候用到,这里都初始化为String
- new Test
().getClassName(""); - // HashMaap的括号里不能使用T,E,T1,T2等不确定的东西,但是可以使用?做为通配符
- HashMap, ?> map = new HashMap
- List> list = new ArrayList
(); - }
-
- public T1 getT1() {
- return (T1)"T1";
- }
-
- T2 getT2() {
- return (T2)"T2";
- }
-
- /**
- *
必须放在void或返回类型的前面 - * @param x
- */
- public
void getClassName(T x) { - System.out.println(x.getClass().getName());
- }
-
- /**
- * Class前面缺少
必须定义,或者出现编译错误, - * 这里的T可以改成其他字符,但是必须要声明
- * 当两个都是Class>,会自动匹配成T
- * 返回参数类型和参数中的类型:class
或Class> - * @param a
- * @return
- */
- public
Class> getClassAndList(Class> a) { - System.out.println(a.getClass().getName());
- // 下面这个会报错,原因是会认为ArrayList必须是一种类型,List<>表示通配
- //List> list = new ArrayList>();
- List> aa = new ArrayList
(); - // 下面方法也是正确的
- List
t = new ArrayList(); - System.out.println(aa);
- return a;
- }
- }