public class MyArrrayList <E>{
Object[] array = new Object[10];
public boolean add(E e){ //添加元素
return true;
}
}
GenericDemo2 类:用来测试代码
java复制代码
public class GenericDemo2 {
public static void main(String[] args) {
//目标:自定义泛型类
MyArrrayList list = new MyArrrayList();
list.add(10);
list.add("ll");
MyArrrayList <String> list2 = new MyArrrayList<String>();
list2.add("hello");
//list2.add(11); //报错
}
}
public class StudentData implements data<Student>{
@Override
public void add(Student s) {
System.out.println("添加学生数据成功");
}
@Override
public void remove(Student s) {
}
}
TeacherData 类
java复制代码
public class TeacherData implements data<Teacher> {
@Override
public void add(Teacher s) {
}
@Override
public void remove(Teacher s) {
}
}
enericDemo3类
java复制代码
public class GenericDemo3 {
public static void main(String[] args) {
//目标:搞清楚泛型接口的基本作用
//需求:项目需要学生数据/老师数据都要进行增删改查操作
StudentData s = new StudentData();
s.add(new Student()); //添加学生数据
TeacherData t = new TeacherData();
t.add(new Teacher()); //添加老师数据
}
}
4、泛型方法
代码4:
enericDemo4类
java复制代码
public class enericDemo4 {
public static void main(String[] args) {
//目标:学会定义泛型方法,搞清楚作用。
//打印任意数组的内容
Integer[] intArr = {1, 2 , 3, 4 , 5};
printArr(intArr);
Character [] CharArr = {'a','b','v'};
printArr(CharArr);
String[] name = {"1", "hhh", "你好"};
printArr(name);
}
public static <E>void printArr(E []arr){
int len = arr.length;
for(int i = 0; i < len; i++){
System.out.print(arr[i]+ " ");
}
System.out.println();
}
}
/*
1 2 3 4 5
a b v
1 hhh 你好
*/
5、通配符、上下限
就是"?",可以在**"使用泛型**"的时候代表一切类型:E T K V 是在定义泛型的时候使用。
泛型上下限:
泛型上限: ?extends Car : ?能接收的必须是Car或者其子类。
泛型下限: ? super Car: ?能接收的必须是Car或者其父类。
代码5:下面的代码只是写了个框架来理解通配符以及泛型上下限。
Car类
java复制代码
//车类
//父类
public class Car {
}
XiaoMi类
java复制代码
public class XiaoMi extends Car{
}
BaoMa类
java复制代码
public class BaoMa extends Car{
}
Dog类
java复制代码
public class Dog {
}
enericDemo5:测试1
java复制代码
import java.util.ArrayList;
public class enericDemo5 {
public static void main(String[] args) {
//理解通配符和上下限
ArrayList<Car> list = new ArrayList<>();
list.add(new BaoMa());
list.add(new XiaoMi());
go(list);
}
//开发一个方法表示车要比赛,这里可能不同类型的车比
public static void go(ArrayList<Car> c){
}
}
enericDemo6 类:测试2
java复制代码
import java.util.ArrayList;
public class enericDemo6 {
public static void main(String[] args) {
ArrayList<XiaoMi> list = new ArrayList<>();
list.add(new XiaoMi());
list.add(new XiaoMi());
go( list);
ArrayList<BaoMa> list2 = new ArrayList<>();
list2.add(new BaoMa());
list2.add(new BaoMa());
go( list2);
ArrayList<Dog> list3 = new ArrayList<>();
// list3.add(new Dog());
// list3.add(new Dog());
// go(list3);
}
//如果这里要传入多种类型的参数
//<>中写 XiaoMi,BaoMa、 Car 在调用时候都能会出问题
//所以这里可以使用? 通配符<?>
//表示这个方法可以接收任意类型的参数
//那么问题来了,既然可以接收任意类型的参数。如果传入一个狗呢? 可以。但是狗没有不是Car,显然与现实不符
//不能让狗和车比赛
//所以引入了通配符的上限,下限
public static void go(ArrayList<? extends Car> list){ //只有Car或者Car的子类才能调用这个方法
}
public static void go2(ArrayList<? super Car> list){ //只有Car或者Car的父类才能调用这个方法
}
public static void go3(ArrayList<?> list){ //任何类型都可以调用这个方法
}
public static void go4(ArrayList<XiaoMi> list){ //只有小米才能调用这个方法
}
public static void go5(ArrayList<BaoMa> list){ //只有宝马才能调用这个方法
}
//只有车才能调用这个方法 ,虽然XiaoMi和BaoMa都是Car的子类,但是ArrayList<XiaoMi> ArrayList<BaoMa>
// 和 ArrayList<Car>没有关系的
public static void go6(ArrayList<Car> list){ //只有车才能调用这个方法
}
}
import java.util.ArrayList;
public class enericDemo7 {
public static void main(String[] args) {
//目标:搞清楚泛型集合不支持基本数据类型
ArrayList<int> list = new ArrayList<>(); //报错
}
}