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<T1, T2> {public static void main(String[] args) {System.out.println(new Test<>().getT1());System.out.println(new Test<>().getT2());// T1, T2在new的时候用到,这里都初始化为Stringnew Test<String, String>().getClassName("");// HashMaap的括号里不能使用T,E,T1,T2等不确定的东西,但是可以使用?做为通配符HashMap<?, ?> map = new HashMap<Object, String>();List<?> list = new ArrayList<String>();}public T1 getT1() {return (T1)"T1";}T2 getT2() {return (T2)"T2";}/*** <T>必须放在void或返回类型的前面* @param x*/public <T> void getClassName(T x) {System.out.println(x.getClass().getName());}/*** Class前面缺少<T>必须定义,或者出现编译错误,* 这里的T可以改成其他字符,但是必须要声明* 当两个都是Class<?>,会自动匹配成T* 返回参数类型和参数中的类型:class<T> 或Class<?>* @param a* @return*/public <T> Class<?> getClassAndList(Class<?> a) {System.out.println(a.getClass().getName());// 下面这个会报错,原因是会认为ArrayList必须是一种类型,List<>表示通配//List<?> list = new ArrayList<?>();List<?> aa = new ArrayList<T>();// 下面方法也是正确的List<T> t = new ArrayList<T>();System.out.println(aa);return a;}
}