前言:泛型是JDK5引入的特性可以在编译阶段约束操作的数据类型,并进行检查。
如果说,没有给集合限定类型的话,那么所有数据获取的都是object类,获取数据的时候不能使用子类的特有功能,有缺陷。此时推出了泛型,可以在添加数据的是时候就把类型进行统一。
泛型的格式:<数据类型>
注意:泛型只支持引用数据类型,如果不写泛型,类型默认是Object。
当一个类中,某个变量的数据类型不确定时,就可以定义带有泛型的类

当方法中形参类型不确定时


具体实例



注意:
如果直接 System.out.println(list2),打印的确实是对象的内存地址,而不是内容。
这是因为默认的 toString() 方法返回的是类名@哈希码。必须重写 toString() 方法才能打印出想要的内容。
为什么 Java 集合可以直接打印?
因为 Java 集合框架的所有类都重写了 toString() 方法:
查看 ArrayList 的 toString() 源码:
自定义集合类如何实现同样的效果?
如果您想让自己写的集合类也能像 ArrayList 一样直接打印,必须重写 toString():
利用泛型方法有一个弊端,此时他可以接受任意的数据类型,即使是不在继承结构中的类。 public static <E>void method(ArrayList<E>list){}
区分
如果我们在定义类,方法,接口的时候,如果类型不确定,就可以定义泛型类,泛型方法,泛型接口。 如果类型不确定,但是能知道以后只能传递某个继承体系中,就可以用泛型的通配符(可以限定类型的范围)(例如:方法虽然不确定类型,但我希望只传递继承结构时)
1. ? extends E 可以传递E,或E所有的子类类型 public static void method(ArrayList<? extends Ye> list){}
2. ? super E 或E所有的父类类型