文章目录
- 隐式详解
- 隐式参数
- 隐式类型
隐式详解
调用别人的框架的时候,少了一些方法,需要添加,让别人为你添加不现实
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
}