在 Java 里,**泛型边界(Generic Bounds)**用来限制泛型类型参数能接受的类型范围。常见有 上界、下界、无界 三种,写法集中体现在 <T extends ...> 和 <? extends ...>、<? super ...> 上。
下面系统讲一下。
含义:T 必须是某类或其子类,或某接口的实现类。
<T extends Number>
示例:
public class Box<T extends Number> {
private T value;
}
✅ 合法:
Box<Integer> b1;
Box<Double> b2;
❌ 不合法:
Box<String> b3; // String 不是 Number
<T extends A & B & C>
注意:
<T extends Animal & Serializable & Comparable<T>>
只用于 通配符
<? super Integer>
含义:
可以是 Integer,或其任意父类
List<? super Integer> list;
list = new ArrayList<Integer>();
list = new ArrayList<Number>();
list = new ArrayList<Object>();
✅ 可写入 Integer
❌ 读取只能是 Object
<?>
表示:
List<?> list;
Producer Extends, Consumer Super
extendsvoid read(List<? extends Number> list) {
Number n = list.get(0);
}
supervoid write(List<? super Integer> list) {
list.add(1);
}
public <T extends Comparable<T>> T max(T a, T b) {
return a.compareTo(b) > 0 ? a : b;
}
| 写法 | 含义 |
|---|---|
<T extends Number> |
T 是 Number 子类 |
<? extends Number> |
未知 Number 子类 |
<? super Integer> |
Integer 或其父类 |
<?> |
任意类型 |
类用 extends 定上界,通配符用 super 定下界,PECS 记心间
如果你有具体场景(比如集合、泛型方法、Builder、DAO),我可以给你更贴近代码的例子。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。