Scala之泛型及约束实战

本文探讨了Scala中的泛型及其类型约束。在Scala中,类型变量通过中括弧来定义,例如[T]。类型变量界定包括子类界定(如T <: A表示T是A的子类)和父类界定(如T >: A表示T是A的父类)。此外,还介绍了上下界界定,如T <: A with B表示T是A和B的子类,而T >: A <: B则同时设定了上界和下界。最后,提到了视图界定和类型变量的多重界定。

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

1. 类型变量界定

scala中泛型使用中括弧[]来指定泛型的类型参数,如下所示:

class Stack[A] {
  private var elements: List[A] = Nil
  def push(x: A) { elements = x :: elements }
  def peek: A = elements.head
  def pop(): A = {
    val currentTop = peek
    elements = elements.tail
    currentTop
  }
}

使用时需要在创建Stack对象时指定A的类型:

val stack = new Stack[Int]
stack.push(1)
stack.push(2)
println(stack.pop)  // prints 2
println(stack.pop)  // prints 1

2. 类型变量界定

scala使用如下变量界定符号:

 <:  表示只限定子类,如 T <: A 表示T必须为A的子类

 >:  表示只限定子类,如 T >: A 表示T必须为A的父类

表示:A和B为T上界 
      T <: A with B 
       
 表示:A和B为T下界 
      T >: A with B 
       
 表示:同时拥有上界和下界,并且A为下界,B为上界,A为B的子类,顺序不能颠倒。 
      T >: A <: B 
       
表示:类型变量界定,即同时满足AT这种隐式值和BT这种隐式值 
      T:A:B 
       
表示:视图界定,即同时能够满足隐式转换的A和隐式转换的B 
      T <% A <% B  

    def main(args: Array[String]): Unit = {
      // A =:=B // 表示A类型等同于B类型
      // A <:<B	// 表示A类型是B类型的子类
      def rocky[T](i: T)(implicit ev: T <:< java.io.Serializable) {
        // 执行结果:Life is short ,you need spark!!!
        println("Life is short ,you need spark!!!")
      }
      rocky("Spark")
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值