泛型
泛型泛指一类数据类型,其实是从编译以及语法层面进行类型约束
# 简单定义 以及使用
- 如何定义
public class User<K> {
K name;
int age;
public K getName() {
return name;
}
public void setName(K name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
- 如何使用
public class Test {
public static void main(String[] args) {
// ---------- 没有设置数据类型 默认都是Object类型
User u = new User();
u.setName(false);
// --------- 设置数据类型
User<String> u1 = new User();
u1.setName("lxx");
}
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 定义泛型方法
public class Girl<T> extends User {
T school;
public void setSchool(T school) {
this.school = school;
}
public T getSchool() {
return school;
}
// 次方法为泛型方法
public <M> void eat(M names) {
System.out.println(names);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 继承以及泛型通配符
// Object/ Object[] 与String/ String[] 存在继承关系 父类声明 子类实例
Object o = new Object();
String s = new String();
o = s;
Object[] oArr = new Object[10];
String[] sArr = new String[10];
oArr = sArr;
List<Object> ol = new ArrayList<>();
List<String> os = new ArrayList<>();
// 不存在继承关系 泛型只是从语法层面进行约束。但是ArrayList 本质上都是数组
// ol = os;
List<?> l = new ArrayList<>();
l = ol;
l = os;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
- 可以使用泛型通配符
List<?> l = new ArrayList<>();
# 类型受限
List<Object> l1 = new ArrayList<>();
List<User> l2 = new ArrayList<>();
List<Girl> l3 = new ArrayList<>();
// 表示类型上限 表示其以及子类 都可以赋值
List<? extends User> l4 = new ArrayList<>();
l4 = l2;
l4 = l3;
// l4 = l1;
// 表示类型的下限 表示其以及父类,祖父类等 都可以赋值
List<? super User> l5 = new ArrayList<>();
l5 = l1;
l5 = l2;
// l5 = l3;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<? extends User>
表示类型上限 表示其以及子类 都可以赋值<? super User>
表示类型的下限 表示其以及父类,祖父类等 都可以赋值