隐式参数
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
}
}
}