1、隐式转换
隐式转换时sacla中非常强大的一个功能,无处不在,通过隐式转换,可以很好的扩展程序功能。
2、简单示例
package com.yy.enhance
import scala.io.Source
import java.io.File
//扩展File为RichFile类
class RichFile(val file:File){
def read = Source.fromFile(file.getPath(),"GBK").mkString
}
//implicit隐式转换
object ImplicitContext{
implicit def file2RichFile(file:File) = new RichFile(file)
}
object ImplicitTest extends App {
//下面的代码会包类型不匹配编译错误
// val x:Int = 1.5
//经过下面的处理,错误不会出现了
//通过iplicit关键字,把Double类型转为Int类型了
implicit def double2Int(x:Double) = x.toInt
val x2:Int = 1.5
println("x2=" + x2)
//引包
import ImplicitContext.file2RichFile
println(new File("D:\\ww\\test.txt").read)
}
3、结果
x2=1
this is the first line of this txt file.
您好,世界。
我是一只小小鸟
残缺的孤独
4、最佳实践
package com.yy.enhance
import scala.io.Source
import java.io.File
/**
* 最佳实践
*/
//扩展File为RichFile类
class RichFile2(val file:File){
def read = Source.fromFile(file.getPath(),"GBK").mkString
}
//伴生类
class Rich_File(path:String) extends File(path)
//伴生对象
object Rich_File{
implicit def file2RichFile(file:File) = new RichFile2(file);
}
object ImplicitBestPractice extends App {
println(new Rich_File("D:\\ww\\test.txt").read)
}
结果如下:
this is the first line of this txt file.
您好,世界。
我是一只小小鸟
残缺的孤独