42.Scala中泛型类、泛型函数、泛型在Spark中的广泛应用

一、Scala中的泛型类代码实战

sealed abstract class List[+A] extends AbstractSeq[A]
                                  with LinearSeq[A]
                                  with Product
                                  with GenericTraversableTemplate[A, List]
                                  with LinearSeqOptimized[A, List[A]]
                                  with Serializable {...}
泛型:定义时没指明具体类型,使用时才指明

List的泛型是A,那么它继承的抽象类和接口的泛型都是A


二、Scala中泛型函数代码实战

class Triple[F,S,T](val first : F, val second : S, val third : T)


object Hello_Type_42 {
 
  def main(args: Array[String]): Unit = {
   
    val triple = new Triple("spark", 8, 8.3)   //这里并没有指明泛型类型,但是scala会根据实际传入的类型来推导出泛型的类型
    val t1 = new Triple[String, String,Char]("ni", "d",'a')  //括号里的元素类型只能是我们规定的类型或其子类
 
      //泛型函数
       def getData[T](list : List[T]) = list(list.length/2)
    println(getData(List("spark","hadoop","scala")))
    val f = getData[Int] _
    println(f(List(1,2,3,4,5,6,7,8,9)))


      def foo[A,B](f : A => List[A], b: A) = f(b)  //这里b必须是A类型


 }
}
输出:

hadoop
5

自己定义一个泛型类Triple

通过类型推导 + 隐式转换,可以写出表达力很强、很简洁的语句


四、ClassTag

class Triple[F : ClassTag ,S,T](val first : F, val second : S, val third : T)

ClassTag添加了更多上下文信息,在运行时,可以根据运行时这个泛型类传递来的具体数据来提供更多信息


三、Scala中的泛型在Spark中的广泛应用

可以参考Spark中RDD中的泛型代码




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值