本次博客开启新的一章的学习,带领大家学习泛型的理解和好处。
先使用传统的方法来解决 --> 引出泛型
public class Generic01 {
public static void main(String[] args) {
//使用传统方法来解决
ArrayList arrayList = new ArrayList();
arrayList.add(new Dog("旺财",10));
arrayList.add(new Dog("发财",1));
arrayList.add(new Dog("小黄",5));
arrayList.add(new Cat("招财猫",8));
//遍历
for (Object o :arrayList) {
Dog dog = (Dog) o;
System.out.println(dog.getName()+"--"+dog.getAge());
}
}
}
class Dog{
private String name;
private int age;
public Dog(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
class Cat{
private String name;
private int age;
public Cat(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class Generic02 {
public static void main(String[] args) {
/*
1.当我们 ArrayList 表示存放到 ArrayList 集合中的元素是Dog类型
2.如果编译器发现添加的类型,不满足要求,就会报错
3.在遍历的时候,可以直接取出 Dog类型而不是Object
*/
ArrayList<Dog> arrayList = new ArrayList<Dog>();
arrayList.add(new Dog("旺财",10));
arrayList.add(new Dog("发财",1));
arrayList.add(new Dog("小黄",5));
//arrayList.add(new Cat("招财猫",8));
System.out.println("======使用泛型=====");
for (Dog dog : arrayList) {
System.out.println(dog);
}
}
}
泛型的好处
编译时,检查添加元素的类型,提高了安全性。
减少了类型转换的次数,提高效率。
不使用泛型
Dog -加入- > Object -取出- >Dog //放入到ArrayList 会先转成Object,在取出时,还需要转换成Dog。
使用泛型
Dog -> Dog -> Dog //放入时,和取出时,不需要类型转换,提高效率
不再提示编译警告。