码迷,mamicode.com
首页 > 编程语言 > 详细

Java泛型学习笔记 - (四)有界类型参数

时间:2016-05-28 01:01:01      阅读:653      评论:0      收藏:0      [点我收藏+]

标签:

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不在第一个位置上就会编译出错.

Java泛型学习笔记 - (四)有界类型参数

标签:

原文地址:http://www.cnblogs.com/zhenyu-go/p/5536604.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!