引
jdk1.5以后引入了泛型的概念,即:<>,规定了集合中元素类型
比如下面代码:
总而言之就是,泛型规范了集合的元素的类型(让集合知道了自己应该装的是什么类型),不符合,编译不通过。List list1 = new ArrayList(); List<String> list2 = new ArrayList(); list1.add(1); list1.add("1"); list2.add(1);//明显会报错
分别代表:T - Type, E - Element,N - Number
作用分析,如下
public class Demo01 { @Test public void test() { Box<String> b = new Box<>(); b.get(); } } class Box<T>{ public T get(T t) {return t;} }
Box类声明了泛型T,但是T的类型,是由引用者声明,一旦声明了T的类型,比如String;Box中的get方法的参数类型,返回值类型,也都是String。总而言之,该类中所有出现T的地方,都只接受T类型的参数。
<?>:
- 等价于: <? extends Object>
- 他叫作:类型通配符
出现于方法的参数里
public static void getData(Box<?> data) { System.out.println("data :" + data.getData()); }
- 作用:限制参数类型,
- <?>:限制参数类型为 Object和其子类(不知道或者不关心参数的具体类型);
- <? extends Number> :限制参数类型为Number和其子类;
- <? super Number> :限制参数类型为Number和其父类;
简单总结:
- <?>:是<? extends Object>简写,限制了某个方法传入参数的类型;
***
本文参考:http://www.cnblogs.com/lwbqqyumidi/p/3837629.html