[ java泛型 ] 只闻其名---->“浅浅“了解 - 指南
目录
1.为什么使用泛型
早期的Object类型可以接收任意的对象类型,但是在实际的使用中,存在类型转换的问题. 也就存在着隐患,所以Java提供了泛型来解决这个安全问题
2.什么是泛型
泛型是“参数化类型” , 在没有为集合定义泛型< >时,可以存储任意的类型 , 一个集合中存储多种类型的数据时,存储没有问题 , 但是对后续的处理造成很大的不便,这时需要 判断类型和向下转型
package fanxing;
import java.util.ArrayList;
public class Demo {
public static void main(String[] args) {
//没有使用泛型,可以储存各种类型的数据
ArrayList arrayList = new ArrayList();
arrayList.add(5);
arrayList.add("中国");
arrayList.add(true);
//使用泛型,可以限制要储存的类型数据
ArrayList arrayList1 = new ArrayList<>();
arrayList1.add(1);
arrayList1.add(5);
arrayList1.add(6);
}
}
3.泛型类
(1)定义:
泛型用于类的定义中,被称为泛型类。通过泛型可以完成对一组类的操作
(2)注意:
泛型的类型参数只能是类类型(大写的),
泛型的类型参数可以有多个
如果没有定义具体的类型,默认为Object类
T (type类型) 可以为任意标识符 例如 E (element元素) V (value值) K (key键)
package fanxing;
//
public class Student {
private String name ;
//泛型定义成员变量
private T age;
private C gender;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public T getAge() {
return age;
}
public void setAge(T age) {
this.age = age;
}
public C getGender() {
return gender;
}
public void setGender(C gender) {
this.gender = gender;
}
public Student(String name, T age, C gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
}
package fanxing;
public class Text1 {
public static void main(String[] args) {
//Student 类型只能是类类型(大写的)
Student student = new Student("jim",12,'男');
student.getAge();
//不定义泛型时,默认继承Objcet类
Student student1 = new Student("tom",15,'女');
student1.getAge();
}
}
4.继承泛型类
两种方法:
1.当一个类继承泛型时,子类和父类都继续定义为泛型,之后再给定子类泛型的类型
2.子类不是泛型类时,需要明确父类的泛型类型
举例:
package fanxing;
//B类是泛型类
public class B1 {
T age;
}
1.当一个类继承泛型时,子类和父类都继续定义为泛型,之后再给定子类泛型的类型
package fanxing;
//子类和父类都是泛型类
public class A1 extends B1 {
public static void main(String[] args) {
A1 a =new A1();//给定子类泛型类型
}
}
2.子类不是泛型类时,需要明确父类的泛型类型
package fanxing;
//子类不是泛型类时,需要明确父类的泛型类型
public class A2 extends B1{
public static void main(String[] args) {
A2 a = new A2();
}
}
5.实现泛型接口
泛型接口与泛型类的定义及使用基本相同
举例:
1.子类和父类都是泛型类
class A<T> implements Demo<T>{ }
2.子类不是泛型类,父类要明确泛型的数据类型
public class A implements Demo<String> { }