java 泛型----T、?的使用

妖狐艹你老母 2022-05-21 06:17 430阅读 0赞

java中T表示泛型。?表示不确定的类型。
jdk使用K表示键,V表示值,T表示type类型,E表示enum枚举。这四个符号只是表示泛型名称,可以换成其他字母,但是需要在之前声明。
参考文章:https://blog.csdn.net/cris001cris/article/details/53712189
示例代码如下:

  1. package javaCode;
  2. import java.util.HashMap;
  3. import java.util.List;
  4. import java.util.ArrayList;
  5. public class Test<T1, T2> {
  6. public static void main(String[] args) {
  7. System.out.println(new Test<>().getT1());
  8. System.out.println(new Test<>().getT2());
  9. // T1, T2在new的时候用到,这里都初始化为String
  10. new Test<String, String>().getClassName("");
  11. // HashMaap的括号里不能使用T,E,T1,T2等不确定的东西,但是可以使用?做为通配符
  12. HashMap<?, ?> map = new HashMap<Object, String>();
  13. List<?> list = new ArrayList<String>();
  14. }
  15. public T1 getT1() {
  16. return (T1)"T1";
  17. }
  18. T2 getT2() {
  19. return (T2)"T2";
  20. }
  21. /** * <T>必须放在void或返回类型的前面 * @param x */
  22. public <T> void getClassName(T x) {
  23. System.out.println(x.getClass().getName());
  24. }
  25. /** * Class前面缺少<T>必须定义,或者出现编译错误, * 这里的T可以改成其他字符,但是必须要声明 * 当两个都是Class<?>,会自动匹配成T * 返回参数类型和参数中的类型:class<T> 或Class<?> * @param a * @return */
  26. public <T> Class<?> getClassAndList(Class<?> a) {
  27. System.out.println(a.getClass().getName());
  28. // 下面这个会报错,原因是会认为ArrayList必须是一种类型,List<>表示通配
  29. //List<?> list = new ArrayList<?>();
  30. List<?> aa = new ArrayList<T>();
  31. // 下面方法也是正确的
  32. List<T> t = new ArrayList<T>();
  33. System.out.println(aa);
  34. return a;
  35. }
  36. }

发表评论

表情:
评论列表 (有 0 条评论,430人围观)

还没有评论,来说两句吧...

相关阅读

    相关 java和自定义T

      在编译过程中,对于正确检验泛型结果后,会将泛型的相关信息擦出,也就是说,成功编译过后的class文件中是不包含任何泛型信息的。泛型信息不会进入到运行时阶段。 1.泛型类