scala隐式转换

scala提供的隐式转换特性可以在效果上给一个类增加一些方法,或者用于接收不同类型的对象,然而使用scala的隐式转换是有一定的限制的,总结如下:
1. implicit关键字只能用来修饰方法、变量(参数)和伴随对象;
2. 隐式转换的方法(变量和伴随对象)在当前范围内才有效,如果隐式转换不在当前范围内定义(比如定义在另一个类中或包含在某个对象中),那么必须通过import语句将其导

object Context_Helper{  
    implicit class FileEnhancer(file : File){    
        def read = Source.fromFile(file.getPath).mkString  
    }
    implicit class Op(x:Int){
         def addSAP(second: Int) = x + second
    }
}
object Implicits_Class {
  def main(args: Array[String]){
    import Context_Helper._
    println(1.addSAP(2))
    //file类没有read方法,但在导入的域里找到了隐式方法
    println(new File("E:\\WangJialin.txt").read)   
  }   
}  

abstract class Template[T] {
    def add(x: T, y: T): T
}

abstract class SubTemplate[T] extends Template[T] {
    def unit: T
}

object Implicits_Object {
  def main(args: Array[String]) {
      implicit object StringAdd extends SubTemplate[String] {
        override def add(x: String, y: String) = x concat y
        override def unit: String = ""
      }

      implicit object IntAdd extends SubTemplate[Int] {
        override def add(x: Int, y: Int) = x + y
        override def unit: Int = 0
      }

      def sum[T](xs: List[T])(implicit m: SubTemplate[T]): T =
        if (xs.isEmpty) 
            m.unit
        else 
            m.add(xs.head, sum(xs.tail))

      println(sum(List(1, 2, 3, 4, 5))) //15
      println(sum(List("Scala", "Spark", "Kafka"))) //ScalaSparkKafka

  }
}  

隐式参数

//隐式参数
object Context_Implicits{
    implicit val default:String = "Flink"
}

object Param{
   def print(content:String)(implicit language:String){
      println(language+":"+content)
   }
}

object Implicit_Parameters {
  def main(args: Array[String]) {
    Param.print("Spark")("Scala") //Scala:Spark

    import Context_Implicits._
    Param.print("Hadoop") //Flink:Hadoop
  }
}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值