Java 泛型是 JDK 5 引入的语言特性,用于实现类型参数化,增强代码的类型安全和复用性。通过泛型,我们可以在类、接口和方法定义时指定类型参数,避免强制类型转换并减少运行时异常。
传统代码中常使用 Object
类型来实现通用方法或容器,但这样会带来:
泛型在编译时进行类型检查,保证类型安全。
java复制编辑public class Box<T> {
private T content;
public void setContent(T content) {
this.content = content;
}
public T getContent() {
return content;
}
}
java复制编辑Box<String> stringBox = new Box<>();
stringBox.setContent("Hello");
String str = stringBox.getContent();
java复制编辑public <E> void printArray(E[] array) {
for (E element : array) {
System.out.println(element);
}
}
?
通配符的使用? extends T
:上界通配符,表示类型是 T 或 T 的子类
? super T
:下界通配符,表示类型是 T 或 T 的父类
?
:无界通配符,表示任意类型
java复制编辑List<? extends Number> list1; // 只能读取,不能添加
List<? super Integer> list2; // 可以添加 Integer 及其子类
Java 泛型通过类型擦除实现向后兼容:
泛型极大提升了集合框架的安全性和便利性:
java复制编辑List<String> list = new ArrayList<>();
list.add("Java");
String s = list.get(0); // 无需强制转换
List<String>
不是 List<Object>
的子类型
Java 不允许直接创建泛型数组:
java复制编辑T[] arr = new T[10]; // 编译错误
解决方法:
java复制编辑@SuppressWarnings("unchecked")
T[] arr = (T[]) new Object[10];
java复制编辑public class Cache<K, V> {
private Map<K, V> map = new HashMap<>();
public void put(K key, V value) {
map.put(key, value);
}
public V get(K key) {
return map.get(key);
}
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。