Java
//先定义两个实体类:
public class Student {
}
public class Teacher {
}
java //定义一个对数据进行操作的泛型接口
public interface Data<T> {
void add(T t);
void update(T t);
T getById(int id);
void delete(int id);
}
typescript
//处理学生数据的实现类
public class StudentData implements Data<Student>{
@Override
public void add(Student student) {
}
@Override
public void update(Student student) {
}
@Override
public Student getById(int id) {
return null;
}
@Override
public void delete(int id) {
}
}
//处理老师数据的实现类
public class TeacherData implements Data<Teacher>{
@Override
public void add(Teacher teacher) {
}
@Override
public void update(Teacher teacher) {
}
@Override
public Teacher getById(int id) {
return null;
}
@Override
public void delete(int id) {
}
}
java
public class Test {
public static void main(String[] args) {
//目标:认识泛型接口。
//需求:需要对学生 和 老师的数据都进行增删改查操作
StudentData studentData = new StudentData();
TeacherData teacherData = new TeacherData();
}
}
typescript
public class GenericityDemo {
public static void main(String[] args) {
//目标:认识泛型方法的作用
//需求:接受任意类型的数组并进行操作
Student[] students = new Student[10]; printArray(students);
Movie[] movies = new Movie[6]; printArray(movies);
String[] strings = new String[20]; printArray(strings);
}
ArrayList<Dog> dog = new ArrayList<>();
dog.add(new Dog());
dog.add(new Dog());
dog.add(new Dog());
dog.add(new Dog());
go(dog);//因为?代表一切类型,所以dog也可以进去。因此引入上下限概念
}
//虽然BWM和BENZ是Car的子类,但是ArrayList<BENZ>和ArrayList<BWM>与ArrayList<Car>没有任何关系
// public static void go(ArrayList<Car> car){
//
// } //就是 “?” ,可以在“使用泛型”的时候代表一切类型; E T K V 是在定义泛型的时候使用。
public static void go(ArrayList<?> car){
}
}
class Car{}
class BWM extends Car{}
class BENZ extends Car{}
class Audi extends Car{}
class Dog{}
上下限
java
public class GenericityDemo2 {
public static void main(String[] args) {
//目标:认识通配符 ?
//需求: 要求所有的汽车都可以一起参加比赛
ArrayList<BWM> bmws = new ArrayList<>();
bmws.add(new BWM());
bmws.add(new BWM());
bmws.add(new BWM()); go(bmws);
ArrayList<Dog> dog = new ArrayList<>();
dog.add(new Dog());
dog.add(new Dog());
dog.add(new Dog());
dog.add(new Dog());
//go(dog);//因为?代表一切类型,所以dog也可以进去。因此引入上下限概念
}
//虽然BWM和BENZ是Car的子类,但是ArrayList<BENZ>和ArrayList<BWM>与ArrayList<Car>没有任何关系
// public static void go(ArrayList<Car> car){
//
// } //就是 “?” ,可以在“使用泛型”的时候代表一切类型; E T K V 是在定义泛型的时候使用。 //上下限: ?extends Car :?必须是Car或者Car的子类。 上限! // ?super Car : ?必须是Car或者Car的父类。 下限!
public static void go(ArrayList<? extends Car> car){
}
}
class Car{}
class BWM extends Car{}
class BENZ extends Car{}
class Audi extends Car{}
class Dog{}
泛型支持的类型
注意:泛型不支持基本数据类型,只能支持对象类型(引用数据类型)
typescript
public class GenericDemo6 {
public static void main(String[] args) {
//目标:搞清楚泛型不支持基本数据类型,只能支持对象类型(引用数据类型)
ArrayList<int> list = new ArrayList<>();//报错,泛型和集合都不支持基本数据类型
}
}
包装类
问:为什么要包装类?包装类有哪些?
答:为了万物皆对象,并且泛型和集合都不支持基本类型,支持包装类
8种,int -> Integer , char -> Character,其他的都是首字母大写
包装类就是把基本类型的数据包装成对象的类型
1.把基本数据类型变成包装类对象
java
int a = 10;
//Integer a1 = new Integer(10);//不推荐,jdk9以后就很少使用了
//System.out.println(a1);
Integer a2 = Integer.valueOf(a);//把基本数据类型变成包装类对象 -128 ~ 127之间的对象是同一个。