本文详细讲解Java泛型核心知识点,涵盖泛型作用、泛型类、泛型方法、泛型接口、通配符、上下限、优缺点。
一、泛型概述
泛型就是参数化类型,把数据类型当作参数传递。
作用:
二、泛型的好处
无泛型
List list = new ArrayList();
list.add("Java");
list.add(100);
// 取出必须强转
String s = (String) list.get(0);
有泛型
List<String> list = new ArrayList<>();
list.add("Java");
// list.add(100); 编译报错,类型安全
String s = list.get(0); // 无需强转
三、泛型类
把泛型定义在类上,类中方法可直接使用泛型。
1. 定义泛型类
// T:类型参数,可以是任意标识
public class Box<T> {
private T data;
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
2. 使用泛型类
public class Test {
public static void main(String[] args) {
Box<String> box = new Box<>();
box.setData("泛型测试");
String s = box.getData();
}
}
四、泛型方法
把泛型定义在方法上,方法独立使用泛型。
public class GenericMethod {
// 泛型方法
public <T> T show(T t) {
System.out.println(t);
return t;
}
}
使用:
show("Java");
show(100);
show(3.14);
五、泛型接口
把泛型定义在接口上。
1. 定义泛型接口
public interface MyInterface<T> {
T test();
}
2. 实现方式1:指定具体类型
public class TestImpl implements MyInterface<String> {
@Override
public String test() {
return "指定类型";
}
}
3. 实现方式2:保留泛型
public class TestImpl2<T> implements MyInterface<T> {
@Override
public T test() {
return null;
}
}
六、泛型通配符
1. 通配符:?
表示任意类型
public void show(List<?> list) {
// 可以接收任意泛型List
}
2. 上限通配符:? extends T
只允许 T 及 T 的子类
// 接收Number或Number子类
public void show(List<? extends Number> list) {}
3. 下限通配符:? super T
只允许 T 及 T 的父类
// 接收Integer或Integer父类
public void show(List<? super Integer> list) {}
七、泛型常见命名规范
- T:Type(类型)
- E:Element(集合元素)
- K:Key(键)
- V:Value(值)
- N:Number(数值)
八、泛型注意事项
九、泛型使用场景
我是双栈小码哥,点赞+收藏+关注,希望本文能对您的学习和工作有所帮助。





