在 Java 中,泛型(Generics)用于在不指定具体类型的情况下编写可复用的代码,同时在编译期提供类型安全检查。下面从基本概念 → 定义方式 → 常见用法系统说明。
ClassCastException语法:
class 类名<类型参数> {
// 可使用类型参数
}
示例:
public class Box<T> {
private T value;
public void set(T value) {
this.value = value;
}
public T get() {
return value;
}
}
使用:
Box<String> box = new Box<>();
box.set("Hello");
String s = box.get();
语法:
interface 接口名<T> {
T method();
}
示例:
public interface Converter<T, R> {
R convert(T t);
}
实现:
public class StringToIntConverter implements Converter<String, Integer> {
public Integer convert(String s) {
return Integer.parseInt(s);
}
}
语法:
<类型参数> 返回类型 方法名(参数) {}
示例:
public class Util {
public static <T> void print(T t) {
System.out.println(t);
}
}
调用:
Util.print("hello");
Util.print(123);
public class Pair<K, V> {
private K key;
private V value;
}
?List<?> list;
? extends T含义: 只能是 T 或其子类
List<? extends Number> list;
? super T含义: 只能是 T 或其父类
List<? super Integer> list;
❌ 不能 new T()
T obj = new T(); // 编译错误
❌ 不能创建泛型数组
T[] arr = new T[10]; // 错误
❌ 泛型不能用于基本类型
List<int> list; // 错误
List<Integer> list; // 正确
❌ 运行时类型擦除(Type Erasure)
List<String> 和 List<Integer>
运行时都是 List
List<T>, Map<K,V>)如果你愿意,我可以:
你想深入哪一块?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。