0
点赞
收藏
分享

微信扫一扫

scala中的隐式转换

我是小瘦子哟 2022-02-17 阅读 75



文章目录


  • ​​隐式详解​​
  • ​​隐式参数​​
  • ​​隐式类型​​


隐式详解

调用别人的框架的时候,少了一些方法,需要添加,让别人为你添加不现实

scala> implicit def doubleInt(d : Double) = d.toInt
scala> val a : Int = 3.14
a: Int = 3

隐式参数

def say(implicit content : String) = println(content)

def main(args: Array[String]): Unit = {
implicit val cont = "你真帅"
// implicit val cont3 = "你真帅" 隐式参数的时候不能出现歧义
say
}

say的方式定义的参数是隐式参数,没有传递参数的情况下,编译器会在编译时自动从当前上下文中找一个隐式值(符合参数类型的隐式值)

注意 方法参数如果有多个隐式参数,只需要使用一个implicit关键字即可,隐式参数列表必须放在方法的参数列表后面

隐式类型

package threeDay

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


object TestImplicit {

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
}
}

implicit def file2RichFile(file: File) = new RichFile(file)

def main(args: Array[String]): Unit = {
val file = new File("")
file.count()
}
}

注意 必须放在Object中

可以放在其他类里,用导包的方式引入

object MyIm {
implicit def file2RichFile(file: File) = new RichFile(file)
}
import java.io.{BufferedReader, File, FileReader}
object TestImplicit {
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
}
}



}
implicit class FileRead(file: File){
def read = Source.fromFile(file).mkString
}
// 主函数中
def main(args: Array[String]): Unit = {
val file = new File("")
file.read
}



举报

相关推荐

0 条评论