[ java泛型 ] 只闻其名---->“浅浅“了解
目录
1.为什么使用泛型
2.什么是泛型
3.泛型类
4.继承泛型类
5.实现泛型接口
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<Integer> 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<T,C> {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<Byte,Character> 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> {T age;
}
1.当一个类继承泛型时,子类和父类都继续定义为泛型,之后再给定子类泛型的类型
package fanxing;
//子类和父类都是泛型类
public class A1<T> extends B1<T> {public static void main(String[] args) {A1<Integer> a =new A1();//给定子类泛型类型}
}
2.子类不是泛型类时,需要明确父类的泛型类型
package fanxing;
//子类不是泛型类时,需要明确父类的泛型类型
public class A2 extends B1<Integer>{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> { }