scala类型系统:11) upper bounds & lower bounds
2016-04-25 10:57
204 查看
Upper Bounds
在Java泛型里表示某个类型是Test类型的子类型,使用extends关键字:<T extends Test> //或用通配符的形式: <? extends Test>
这种形式也叫
upper bounds(中文为上限或上界),同样的意思在scala的写法为:
[T <: Test] //或用通配符: [_ <: Test]
upper bounds适用于把泛型对象当作数据的提供者(生产者)的场景下:
scala> def pr(list : List[_ <: Any]) { list.foreach(print) }
Lower Bounds
在Java泛型里表示某个类型是Test类型的父类型,使用super关键字:<T super Test> //或用通配符的形式: <? super Test>
这种形式也叫
lower bounds(中文为下限或下界),同样的意思在scala的写法为:
[T >: Test] //或用通配符: [_ >: Test]
lower bound适用于把泛型对象当作数据的消费者的场景下:
scala> def append[T >: String] (buf : ListBuffer[T]) = { buf.append( "hi") }
基本上与java一致,不过在复杂一点的情况下,对多重界定,有一些差异:
Java里,T 同时是 A 和 B 的子类型,称为
multiple bounds
<T extends A & B>
Scala里对上界和下界不能有多个,不过变通的做法是使用复合类型(compund type):
[T <: A with B]
而对于
lower bounds,在java里则不支持
multiple bounds的形式:
<T super A & B> //java不支持
Scala里对复合类型同样可以使用
lower bound
[T >: A with B]
因为Scala里对于
A with B相当于
(A with B),仍看成一个类型,参考复合类型
本条目发布于2013-09-08。属于scala分类,被贴了
scala、type-system 标签。
相关文章推荐
- 又一波福利来临
- EJB中有状态会话Bean的理解
- Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置)
- loadView 和 viewDidLoad、viewDidUnload
- Oracle SQL Developer 使用记录
- iOS高级动画:圆形树展开&收起动画
- Feescale K64开发笔记2: KDS的使用
- android 屏幕底部出现菜单
- Android 属性动画(Property Animation) 完全解析 (下)
- svn使用教程总结
- C# Bulk Operations
- 剑指offer(8):斐波那契数列
- (Unsupported class version number [52.0] (maximum 51.0, Java 1.7))
- org.apache.struts2.json.JSONWriter can not access a member of class
- android bitmap的内存分配和优化
- 【CodeForces 618A】Slime Combining(水题)
- python 爬虫
- android bitmap的内存分配和优化
- android bitmap的内存分配和优化
- Android 属性动画(Property Animation) 完全解析 (上)