56.scala编程思想笔记——类型参数限制

56.scala编程思想笔记——类型参数限制

      欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50447610
源码下载连接请见第一篇笔记。

  如果想让一个枚举成为某个特征的子类型,如果是一个普通类,那么只需在继承时将继承时将该特征添加到基类型的列表中,但是在面对枚举时,必须通过从val继承来创建新的value类型。

例子如下:

import com.atomicscala.AtomicTest._

 

trait Resilience

 

object Bounciness extends Enumeration {

  case class_Val() extends Val

    withResilience

  typeBounciness = _Val

  val level1,level2, level3 = _Val()

}

import Bounciness._

 

object Flexibility extends Enumeration {

  case class_Val() extends Val

    withResilience

  typeFlexibility = _Val

  val type1,type2, type3 = _Val()

}

import Flexibility._

 

trait Spring[R <: Resilience] {

  val res:R

}

 

case class BouncingBall(res:Bounciness)

  extendsSpring[Bounciness]

 

BouncingBall(level2) is

"BouncingBall(level2)"

 

case class FlexingWall(res:Flexibility)

  extendsSpring[Flexibility]

 

FlexingWall(type3) is "FlexingWall(type3)"

其中resilience是标记特征。

其中符号 <: 表示R必须是Resilience类型或某种继承自Resilience的类型。于此等价的表达是 Resilience是R的上界。

         此外还可以通过类型限制实现对方法的调用:

import com.atomicscala.AtomicTest._

 

class WithF {

  def f(n:Int)= n * 11

}

 

class CallF[T <: WithF](t:T) {

  def g(n:Int)= t.f(n)

}

 

new CallF(new WithF).g(2) is 22

 

new CallF(new WithF {

  override deff(n:Int) = n * 7

}).g(2) is 14

在CallF内可以调用f的唯一原因是其类型被限制为 WithF或 WithF的子类。

内联一个不具名的WithF子类,其方式是在new WithF 后面跟着花括号,中间包含继承类的类体。

         类型参数限制远比此处复杂,是自身的一种代数。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值