大数据系列修炼-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
原创粉丝点击