大数据系列修炼-Scala课程64
来源:互联网 发布:剑三霸刀正太捏脸数据 编辑:程序博客网 时间:2024/04/29 21:42
大数据系列修炼-Scala课程64
核心内容:
1、Scala中隐式对象操作代码实战
1、Scala中隐式对象操作代码实战
1>所谓隐式对象,就是在object对象前面有implicit关键字
2>隐式对象可以作为隐式值进行使用
3>在Scala当中,标注类型的时候可以直接用类和特质的名字来引用其类型,要引用对象的类型,需要用对象的type成员来引用其类型,而不能直接用object的名字来引用其类型
实例程序1:
abstract class A{ def fun():Unit }object B extends A{ def fun() = println("Spark") //抽象方法被实现}object App { def main(args:Array[String]):Unit = { def fun(obj:A) = obj.fun() fun(B) //静态对象可以做为参数进行使用 }}
实例程序2:
abstract class Template[T]{ def add(x:T,y:T):T}abstract class SubTemplate[T] extends Template[T] //定义一个抽象的泛型类{ def unit:T}object App { def main(args:Array[String]):Unit = { implicit object StringAdd extends SubTemplate[String] { def add(x:String,y:String):String = x concat y def unit:String = "" } implicit object IntAdd extends SubTemplate[Int] //scala中单例对象也可以继承类 { def add(x:Int,y:Int):Int = x + y def unit:Int = 0 } def sum[T](xs:List[T])(implicit m:SubTemplate[T]):T= { if(xs.isEmpty) m.unit else m.add(xs.head, sum(xs.tail)) } println(sum[String](List("Spark","Hadoop","Hbase"))(StringAdd)) //StringAdd隐式值可以省略 println(sum(List(10,20,30))(IntAdd))//IntAdd隐式值可以省略 }}
注意:在上面的程序中,m是隐式对象,如果T是int,则使用IntAdd这个隐式对象,如果T是String,则使用StringAdd这个隐式对象。
实例程序3:自己编写的程序
abstract class A{ def fun():Unit}object App { def main(args:Array[String]):Unit = { implicit object B extends A { def fun() = println("Spark") } def g(str:String)(implicit obj:A) { println(str) } g("Spark")(B) g("Hadoop") }
深度思考1:下面的程序竟然不报错?????
object App{ def main(args : Array[String]): Unit = { trait S1{def fun():Unit} implicit object S2 extends S1{ override def fun() = println("1111111222") } implicit var s1 = new S1{ override def fun() = println("66666666633")} def g(str:String)(implicit arg:S1) = arg.fun() g("Spark") }}
如有问题,欢迎留言指正!
0 0
- 大数据系列修炼-Scala课程64
- 大数据系列修炼-Scala课程01
- 大数据系列修炼-Scala课程02
- 大数据系列修炼-Scala课程03
- 大数据系列修炼-Scala课程04
- 大数据系列修炼-Scala课程05
- 大数据系列修炼-Scala课程06
- 大数据系列修炼-Scala课程07
- 大数据系列修炼-Scala课程08
- 大数据系列修炼-Scala课程09
- 大数据系列修炼-Scala课程10
- 大数据系列修炼-Scala课程11
- 大数据系列修炼-Scala课程12
- 大数据系列修炼-Scala课程15
- 大数据系列修炼-Scala课程17
- 大数据系列修炼-Scala课程18
- 大数据系列修炼-Scala课程19
- 大数据系列修炼-Scala课程20
- 从文本中随机选择百万行
- linux基础命令操作
- android入门详解
- 将身份证号后六位替换成*方法
- light oj 1033 - Generating Palindromes 【LCS】
- 大数据系列修炼-Scala课程64
- 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
- Remoting和Webservice的区别
- Ubuntu 安装 Oracle JDK
- 链表的操作
- vi\vim -关于清空文件内容快捷命令
- JAVA之Annotation (一)
- 【Linux 系统编程】shell 脚本基础学习之函数(五)
- 孩子“脏”一些更健康