Scala隐式转换

  • 隐式转换的作用:偷偷的对某一个类进行增强(添加某一个方法)

  • 隐式转换通用格式
    1、通常需要一个增强的类,例如RichRDD
    2、一个已经存在的类,例如RDD

  • 代码演示
    增强的类

package com.soul.implict

import org.apache.spark.rdd.RDD

/**
  * 为RDD添加一个打印数据的增加类
  */

class RichRDD[T](var rdd: RDD[T]) {

  def printInfo(flag: Int): Unit = {
    if (flag == 0) {
      rdd.collect().foreach(println)
    }

  }

}

为RDD添加这个增强类的功能

package com.soul.implict

import org.apache.spark.rdd.RDD

object ImplictAspect {

  implicit def rdd2RichRDD[T](rdd: RDD[T]):RichRDD[T]= new RichRDD[T](rdd)
}

  • 通用公式为
implicit def <已存在的类>2<增强的类>(传进来存在类):返回增强的类 = new 增强的类(传进来存在的类)
  • Spark源码中的隐式转换
    例如:RDD的ReduceByKey算子就是通过隐式转换获取了PairRDDFunctions的方法
 implicit def rddToPairRDDFunctions[K, V](rdd: RDD[(K, V)])
    (implicit kt: ClassTag[K], vt: ClassTag[V], ord: Ordering[K] = null): PairRDDFunctions[K, V] = {
    new PairRDDFunctions(rdd)
  }
Scala隐式转换_第1张图片
image.png

你可能感兴趣的:(Scala隐式转换)