Scala 隐式转换

隐式参数

object ImplicitPara {
    def say(implicit content: String) = println(content)
    def main(args: Array[String]): Unit = {
        say("有参")
        implicit val msg = "无参"
        say//say方法的参数是隐式参数,如果你没有传递参数的话,自动的从当前的上下文中找一个隐式值(符合参数的类型的隐式值,这里是msg)
    }
}

隐式类型转换

ImplicitType2.scala

import java.io.File

object ImplicitType {
    implicit val content = 1
    implicit def double2Int(double: Double) = {//隐式转换方法
        println("---double2Int---")
        double.toInt
    }
    implicit val fdouble2Int = (double: Double) => {//隐式转换函数,优先级比隐式转换方法高
        println("---fdouble2Int---")
        double.toInt
    }
    def main(args: Array[String]): Unit = {
        val age: Int = 20.5// age是一个Int类型,但是赋值的时候却是一个浮点型,自动找一个能把浮点型变成Int的隐式转换
        println(age)
        val file = new File("D:\\code\\ip\\access.log")
        import MyImpicits._
        println("Count = "+file.count())//file中本来没有count方法,但是我们在MyImpicits类中定义了一个隐式的转换方法,将file转换为了RichFile
    }
}

ImplicitType2.scala

import java.io.{BufferedReader, File, FileReader}

class RichFile(file: File)  {
  def count(): Int = {
    val fileReader = new FileReader(file)
    val bufferedReader = new BufferedReader(fileReader)
    var sum = 0
    try {
      var line = bufferedReader.readLine()
      while (line != null) {
        sum += 1
        line = bufferedReader.readLine()
      }
    } catch {
      case _: Exception => sum
    } finally {
      fileReader.close()
      bufferedReader.close()
    }
    sum
  }
}


object ImpicitsType2 {
    /**
      * 定义了一个隐式方法,将file类型变成RichFile
      * @param file
      * @return
      */
    implicit def file2RichFile(file: File) = new RichFile(file)
}

隐式类

ImpicitClass.scala

import java.io.File
object ScalaImplicit {
    def main(args: Array[String]): Unit = {
        val file = new File("D:\\code\\ip\\access.log")
        import ImpicitClass2._
        println("Count = "+file.count())
    }
}

ImpicitClass2.scala


import java.io.{BufferedReader, File, FileReader}

object ImpicitClass2 {
    /**
      * 定义了一个隐式方法,将file类型变成RichFile
      * @param file
      * @return
      */

    implicit class RichFile(file: File)  {
      def count(): Int = {
        val fileReader = new FileReader(file)
        val bufferedReader = new BufferedReader(fileReader)
        var sum = 0
        try {
          var line = bufferedReader.readLine()
          while (line != null) {
            sum += 1
            line = bufferedReader.readLine()
          }
        } catch {
          case _: Exception => sum
        } finally {
          fileReader.close()
          bufferedReader.close()
        }
        sum
      }
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值