标签:
王家林亲授《DT大数据梦工厂》大数据实战视频“Scala深入浅出实战经典”视频、音频和PPT下载!第63讲:Scala中隐式类代码实战详解
百度云:http://pan.baidu.com/s/1o6wxJdS
腾讯微云:http://url.cn/TfOJqr
360云盘:http://yunpan.cn/cckajtapNGT9z 访问密码 369d
本节王老师讲了隐式类。其作用就是把转换后的类放在一个作用域中,消除了之前的隐式转换方法。
object Context{
implicit class RichFile(file:File){
def read=Source.fromFile(file.getPath).mkString
}
}
这样就可以用普通的file调用read方法了。注意首先一定要import Context._
然后 println(new File("E:\\hehe.txt").read)
王家林亲授《DT大数据梦工厂》大数据实战视频“Scala深入浅出实战经典”视频、音频和PPT下载!第64讲:Scala中隐式对象代码实战详解
百度云:http://pan.baidu.com/s/1dD97ukp
腾讯微云:http://url.cn/cuHO1G
360云盘:http://yunpan.cn/ccvfgzhPAE8Di 访问密码 2513
本节王老师讲了隐式对象。如果隐式参数想要通过泛型来达到多态,就要用到隐式对象来继承这个参数类。
首先定义一个泛型抽象类
abstract class Template[T]{
def add(x:T,y:T):T
def unit:T
}
然后在main方法中可以定义2个隐式对象为Template实现多态
object Implicit_Object{
main(args: Array[String]){
implicit object StringAdd extends Template[String]{
def add(x:String,y:String):String=x concat y
def unit:String =""
}
implicit object IntAdd extends Template[Int]{
def add(x:Int,y:Int):String=x + y
def unit:String =0
}
def sum[A](xs:List[A])(implicit m: Template[A]):A=
if (xs.isEmpty) m.unit
else m.add(xs.head,sum(xs.tail))//递归调用sum方法,使得list中的每个元素调用add方法
println(sum(List(1,2,3)))
println(sum(List("hehe","xixi","lala")))
}
}
输出6 和 hehexixilala
这样只要是泛型为整数就相加,是String就相连
王家林亲授《DT大数据梦工厂》大数据实战视频“Scala深入浅出实战经典”视频、音频和PPT下载!第65讲:Scala中隐式转换内幕操作规则揭秘、最佳实践及其在Spark中的应用源码解析
百度云:http://pan.baidu.com/s/1hqyCbGg
腾讯微云:http://url.cn/fbnMPM
360云盘:http://yunpan.cn/ccWnW3HQAb52S 访问密码 ba25
本节王老师讲了隐式转换的内幕,就是我们什么都没有看到,但他确实隐式转换了,而且也没有import任何区域。
首先是转换类
class RicherFile(val file:File){
def read=Source.fromFile(file.getPath()).mkString
}
然后定义一个普通类
class File_Implicit(path:String) extends File(path)//这里面的参数一定是转换之前的类型里面的属性或能推倒出来的东西。
object File_Implicit{
implicit def file2RicherFile(file:File)=new RicherFile(file)//隐式转换,正常我们看不见
}
这样println(new File_Implicit("E:\\hehe.txt").read)就会打印文件的内容(我们没有import任何东西)
标签:
原文地址:http://www.cnblogs.com/trgaaaaa/p/4668849.html