java 泛型中 T,E,?号的区别

刚刚用到泛型中的?,一时想不起来通配符和 T,E 是什么区别,T,E 又是什么区别,查了下百度,度娘还是一如既往的不怎么给力, 自己摸索出了个自己能信服的。 1. 在没有出现泛型的的时候

  List list = new ArrayList();

list 可以存任何 Object 对象,为了约束,避免强制转换带来的问题,后来有了泛型,T,E 是一个意思,只是一个别名,可以叫 A,B 都可以,没区别

   List<String> list2 = new ArrayList<>();
   LIst<T extends User> list3 = new ArrayList<>();

list2 表示这个容器只能存 String 的对象, list3 只能存 User 以及 User 的子类

2:通配符?号,这个在使用上有限制 相同 public void test(List<?> list); 这个可以接收 list1,list2,list3 当做参数值,和使用其他 T,E 一样 不同

	List<?> list5 = new ArrayList<>();
   list5不能add任何对象,还有在任何使用?通配符的泛型方法中,我不能返回这个不确定类型
   public <T> test1(T t) {
	 return t;
   }
   正确
   public <?> test1(? ?) {
	 return ?;
   }
   这就是一个错误,没有此语法,只是做个例子
   我们当做一个方法的形参,来获取值