泛型的特点:
- 声明泛型时的位置特殊,用<>来声明
- 使用方法与其他变量类型没有太大差异
- 主要作用是可以让不同的变量类型进行统一操作,包括引用数据类型和对象
- 与Object相比的好处有:不需要强制类型转换,提高效率;编译时较安全
带泛型的方法:
//参数可以接收任何数据类型的数组
public static <E> void print(E[] arrays){
for(E e: arrays){
System.out.println(e);
}
}
//参数只能接收整数数组
public static <E extends Integer> void print(E[] arrays){
for(E e: arrays){
System.out.println(e);
}
}
public static void main(String[] args){
Integer[] is = new Integer[]{1,2,3};//一样要用引用类型
Double[] ds = new Double[]{1.1,2.2,3.3};
print(is);
print(ds);//如果是用第二个print方法,这里会报错
}
带泛型的类:
public class XX<X extends Student> {
//X extends Student 筛选参数类型
//若去掉extends Student,则可以接收任何变量类型
private X x;
public X getX() {
return x;
}
public void setX(X x) {
this.x = x;
}
}
//一个简单的实体类
public class Student {
private Integer sno;
private String sname;
public Student(Integer sno,String sname){
setSno(sno);
setSname(sname);
}
public Integer getSno() {
return sno;
}
public void setSno(Integer sno) {
this.sno = sno;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
@Override
public String toString() {
return "Student{" +
"sno=" + sno +
", sname='" + sname + '\'' +
'}';
}
}
public static void main(String[] args){
XX<Student> xx1 = new XX<>();
xx1.setX(new Student(111,"李老师"));
System.out.println(xx1.getX().toString());
//这里是不是感觉很熟悉,有点类似于List<Student> = new ArrayList<>;
}