Java泛型学习--有界类型参数

本文介绍了Java中泛型的基本概念,并深入探讨了如何使用有界类型参数来限制泛型的类型范围。通过具体示例展示了如何指定泛型的上下界,以及如何利用这些特性增强代码的灵活性和安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 当我们希望对泛型的类型参数的类型进行限制的时候(好拗口), 我们就应该使用有界类型参数(Bounded Type Parameters). 有界类型参数使用extends关键字后面接上边界类型来表示, 注意: 这里虽然用的是extends关键字, 却不仅限于继承了父类E的子类, 也可以代指显现了接口E的类. 仍以Box类为例:

复制代码
 1 public class Box<T> {
 2 
 3     private T obj;
 4     
 5     public Box() {}
 6 
 7     public T getObj() {
 8         return obj;
 9     }
10 
11     public void setObj(T obj) {
12         this.obj = obj;
13     }
14 
15     public Box(T obj) {
16         super();
17         this.obj = obj;
18     }
19 
20     public <Q extends Number> void inspect(Q q) {
21         System.out.println(obj.getClass().getName());
22         System.out.println(q.getClass().getName());
23     }
24 }
复制代码

我加入了public <Q extends Number> void inspect(Q q){...}方法, 该方法的泛型只能是Number的子类.

1 Box<String> b = new Box<>();
2 b.setObj("Hello");
3 b.inspect(12);
4 b.inspect(1.5);
5 // b.inspect(true); // 编译出错

2. 界类型参数除了规定泛型的范围之外, 还允许我们调用边界类型所拥有的方法(因为所有类型参数都是边界类型或边界类型的子类), 如:

复制代码
 1 public class NatureNumber<T extends Integer> {
 2 
 3     private T t;
 4     
 5     public Box() {}
 6 
 7     public NatureNumber(T t) {
 8         this.t = t;
 9     }
10 
11     public boolean isEven() {
12         return t.intValue() % 2 == 0;
13     }
14     
15     // ...
16 }
复制代码

3. 多边界:

上面的例子展示的是单边界的泛型, 我们还可以使用多边界泛型:
  <T extends A & B & C>
但是多边界使用时其实只能继承一个父类, 并且要将他写在第一个位置上. 其他的都是其实现的接口, 如:

1 class A { /* ... */ }
2 interface B { /* ... */ }
3 interface C { /* ... */ }
4 class D <T extends A & B & C> { /* ... */ }

如果A不在第一个位置上就会编译出错.

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值