package com.ming.test

/**
* scala泛型
* 类型参数测试
*/
object TypeParamsTest { //泛型函数
def getMiddle[T](a:Array[T])=a(a.length/2) //类型通配符
def process1(people:java.util.List[_<:Student])={} def main(args: Array[String]): Unit = {
val p=new Pair(42,"String")
val p2=new Pair[Any,Any](42,"ddd") val c=new Compare("A","B");
println(c.smaller)
} }
//定义一个类型参数的类
class Pair[T,M](var one:T,var two :M) //T必须是Comparable[T]的子类型.
class Compare[T<:Comparable[T]](val one:T,val two : T){
def smaller=if(one.compareTo(two)<0) one else two
} //视图界定
/**
* <%关系意味这T可以被隐式转换成Comparable[T],还可以用Ordered特质
*/
class PairT[T <% Comparable[T]] class PairTT[T <% Ordered[T]](val one:T,val two:T){
def smaller=if(one<two) one else two
} //上下文界定
class P[T : Ordering](val one:T,val two:T){
def smaller(implicit ord: Ordering[T])=
if(ord.compare(one, two)<0) one else two
} //Manifest上下文界定
class ManfiestTest{
def makePair[T : Manifest](one:T,two :T){
val r=new Array[T](2)
r(0)=one
r(1)=two
}
} //多重界定,其实就是限定类型范围
class A[T <:Comparable[T] with Serializable with Cloneable] class B[T <% Comparable[T] <% String] class C[T : Ordering : Manifest] class D[T >: String <:String] abstract class List[+T]{
def isEmpty :Boolean
def head :T
def tail: List[T]
} object Empty extends List[Nothing]{
def isEmpty=true
def head=throw new UnsupportedOperationException
def tail=throw new UnsupportedOperationException } class Student{}

scala的泛型比java的要复杂点

最新文章

  1. XDU 1160 - 科协的数字游戏I
  2. [BTS] BizTalk host BizTalkServerApplication throttled because DatabaseSize exceeded the configured throttling limit.
  3. 【struts2】OGNL
  4. Android(Java):jni源代码
  5. as3 中 textfiled的htmltext 的常用属性
  6. DISCUZ X2更换域名注意事项
  7. money 和 smallmoney
  8. 【CF】174 Div.1 B Cow Program
  9. linux是一种修行
  10. OpenCV学习 5:关于平滑滤波器 cvSmooth()函数
  11. 走向DBA[MSSQL篇] 积跬步行千里
  12. 关于Could not resolve dependencies for project
  13. elasticsearch常用命令备注
  14. redis简单命令总结
  15. 云栖大会day1 上午
  16. 多线程编程CompletableFuture与parallelStream
  17. ios-UILabel居中随内容自适应,后面的控件跟在其后
  18. 回归JavaScript基础(十)
  19. jdbc连接池c3p0/dbcp强制连接超过设置时间后失效
  20. java 盒子模型

热门文章

  1. iostart命令
  2. bind和unbind事件的应用
  3. jQuery的dom操作(二)转
  4. Linux就这个范儿 第13章 打通任督二脉
  5. Android 使用PullToRefresh实现下拉刷新和上拉加载(ExpandableListView)
  6. SwipeRefreshLayout实现上拉加载
  7. JavaScript权威指南(第六版)--JavaScript概述 DEMO
  8. JavaScript实现,判断一个点是否在多边形内
  9. iOS开发 - 网络数据安全加密(MD5)
  10. Android基本控件属性设置