Java泛型入门:从基础到实战
·
Hello,大家好,我是Yize,自从开学后,我的作息都变得不规律了哈哈哈,白天还要上课,晚上还要去实验室上晚自习,今天也是能抽出来时间与大家分享,一同进步,下面我们开始
今天要与大家分享的是关于集合的知识,首先今天会和大家分享一下泛型的知识,在后面我会从单列集合双列集合慢慢去与大家一起去探讨
目录
泛型入门
没有集合的时候:
集合在存储数据时,会默认所有数据类型都是 Object类型,此时虽然可以添加任意的数据类型,但最明显的 弊端就是在 获取数据时,无法使用它的特有行为
泛型的好处:
可以 统一数据类型;
把运行时期的 问题提前到编译期间,避免了强制类型转换可能出现的异常,在编译阶段就能确定下来
泛型的细节:
泛型中不能写基本数据类型
指定泛型的具体类型后,在传递数据时,可以传入该类类型或者其子类类型
如果不写泛型,默认类型是Object
泛型类 泛型方法 泛型接口
泛型类:当一个类中,某个变量的数据类型不确定时,就可以定义带有泛型的类
泛型方法:方法中形参类型不确定时,可以使用类名后面定义的泛型
public class MyArrayList{
public <E> boolean add(E e){ /泛型方法/
obj[size] = e;
size++;
return true;
}
}
方法中形参类型不确定时:
1. 使用 类名后面定义的泛型
2. 在 方法申明上定义自己的泛型
泛型接口
两种使用方式:
实现类给出具体类型 (例如在一个类实现接口MyArrayList implement List时 直接 MyArrayList implement List)
实现类延续泛型,创建实现类对象时再确定对象 (例如在一个类实现接口MyArrayList implement List时 直接 MyArrayList implement List,然后在创建实现类对象时: MyArrayList list = new MyArrayList<>() )
泛型的继承和通配符
泛型不具备继承性,但是数据具备继承性
public class demo1{
public static void main(String[] args){
/创建集合的对象/
ArrayList list1 = new ArrayList<>();
ArrayList list2 = new ArrayList<>();
ArrayList list3 = new ArrayList<>();
/调用method方法/ /泛型不具备继承性/
method(list1);
method(list2);//这个会报错,因为泛型不具备继承性
method(list3);//同样,这个也会报错
/数据具备继承性/
list1.add(new Ye());//以下三个就不会报错
list1.add(new Fu());
list1.add(new Zi());
/创建方法/
public static void method(ArrayList<Ye> list){
}
class Ye{}
class Fu extends Ye{}
class Zi extends Fu{}
}
}
那如果使用我们之前学习的泛型方法呢?
public class demo1{
public static void main(String[] args){
/创建集合的对象/
ArrayList list1 = new ArrayList<>();
ArrayList list2 = new ArrayList<>();
ArrayList list3 = new ArrayList<>();
/调用method方法/
method(list1);
method(list2);
method(list3);
/创建方法/
public static<E> void method(ArrayList<E> list){------此时由于用的泛型方法,所以在上面调用method方法时不会报错
------但有一个新的问题就是,此时它可以接受任意的数据类型,例如与Ye它们无关的Student学生类
}
class Ye{}
class Fu extends Ye{}
class Zi extends Fu{}
}
}
但是我们希望:虽然本方法不确定类型,我们仍希望它只能传递Ye Fu Zi
解决方案:使用泛型的通配符
泛型的通配符:(可以限定类型的范围)
? extends E:表示可以传递E以及E的所有子类类型
? super E:表示可以传递E以及E的所有父类类型
public class demo1{
public static void main(String[] args){
/创建集合的对象/
ArrayList list1 = new ArrayList<>();
ArrayList list2 = new ArrayList<>();
ArrayList list3 = new ArrayList<>();
/调用method方法/
method(list1);
method(list2);
method(list3);
/创建方法/
public static void method(ArrayList<? extends Ye> list){------此时这样上面method方法在调用时就不会报错了
? super Zi
}
class Ye{}
class Fu extends Ye{}
class Zi extends Fu{}
}
}
作用(应用场景)
- 如果我们在定义类,方法,接口时,数据类型不确定,就可以使用泛型类,泛型方法,泛型接口;
- 如果类型不确定,但我们已经知道只能传递某个继承体系中的时,就可以使用泛型的通配符
好啦,以上就是我们这篇学习的内容,如果大家有想了解或者有什么建议,希望可以多多发表评论,感谢大家的观看,我们下次见!!!
更多推荐



所有评论(0)