Java 泛型(Generics)是 Java 5 引入的重要特性,对新手来说确实容易“看不懂”,但只要循序渐进,并不难。下面我用新手友好的方式带你学。
没有泛型时的问题:
List list = new ArrayList();
list.add("hello");
list.add(123);
String s = (String) list.get(1); // 运行时报错!
有了泛型:
List<String> list = new ArrayList<>();
list.add("hello");
// list.add(123); // 编译报错
✅ 编译期就能发现错误
✅ 不用强转
✅ 代码更安全、更清晰
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("Java");
String s = box.get();
T是“类型参数”,用的时候再指定
public <T> void print(T t) {
System.out.println(t);
}
调用:
print("hello");
print(123);
? 无界通配符List<?> list;
表示:不知道是什么类型,但一定是某种类型
? extends T(上界)List<? extends Number> list;
✅ 可以读
❌ 不能写(除了 null)
适合:只读场景
? super T(下界)List<? super Integer> list;
✅ 可以写 Integer
❌ 读出来是 Object
适合:只写场景
List<int> list; // 错
List<Integer> list; // 对
List<String> 和 List<Integer>
运行时都是 List
第一步:先用
List<String>Map<String, Integer>第二步:写简单泛型类
第三步:理解通配符
第四步:看源码
泛型 = 把“类型”当参数,让代码更安全、更通用
如果你愿意,我可以:
你想从哪一步开始?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。