泛型
泛型的作用:标识集合中保存的元素
* 好处:
* 1.操作数据更加安全(规范集合中能保存的数据)
* 2.可以避免向下转型(强转类型)的麻烦
* 3.将运行时的错误转到编译时报错
ArrayList<Student> list = new ArrayList<Student>();
list.add(new Student("肖锋", 11));
list.add(new Student("坤", 52));
list.add(new Student("大海", 22));
// 从集合中取出一个元素
Object object = list.get(0);
Student student = (Student) object;
System.out.println(student.getName());
// 从集合中取出一个元素 强转成 工人类型 调用工人的方法
// 不加泛型 获取到集合中的元素 元素的类型你可以随便强转
// 没有约束 编译都会通过
// 加上泛型 可以在编译时 有错误提示 让集合中保存的元素更加安全
泛型的另一种写法
* ? extends E
* 问号是子类 E是父类
* 只能使用父类的子类 或者本类 也叫 向下限定
// 创建一个person集合 保存两个person
ArrayList<Person> list1 = new ArrayList<>();
list1.add(new Person("wang1", 11));
list1.add(new Person("wang2", 11));
// 常见一个student 集合 保存两个student
ArrayList<Student> list2 = new ArrayList<>();
list2.add(new Student("peng1", 21));
list2.add(new Student("peng2", 21));
// addAll(Collection<? extends E> c)
list1.addAll(list2);
list2.addAll(list1); //向子类中添加父类的集合 这时就会报错
System.out.println(list1);