前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spark学习使用笔记 - Scala篇(4)- 对象、包

Spark学习使用笔记 - Scala篇(4)- 对象、包

作者头像
干货满满张哈希
发布2021-04-12 15:11:22
3740
发布2021-04-12 15:11:22
举报
文章被收录于专栏:干货满满张哈希

单例:

代码语言:javascript
复制
object singleton {

  /**
    * 利用单例object:
    * 作为存放工具函数或者常量
    * 高效共享单个不可变实例
    * 单例模式协调
    */
  object ID {
    private var lastNumber = 0;

    def newUniqueId = {
      lastNumber += 1
      lastNumber
    }
  }
}

伴生

代码语言:javascript
复制
object associate {
  /**
    * 伴生对象
    * 针对又有静态方法,又有实例方法的
    */
  object Account {
    private var lastNumber = 0;

    def newUniqueId = {
      lastNumber += 1
      lastNumber
    }
  }

  class Account {
    var balance = 0.0

    def deposit(value:Double) = {
      balance += value
      balance
    }

    def withdraw(value:Double) = {
      balance -= value
      balance
    }
  }
}

apply方法:

代码语言:javascript
复制
object apply {

  class Account private(val id: Int, private var balance: Double) {
    def deposit(value: Double) = {
      balance += value
      balance
    }

    def withdraw(value: Double) = {
      balance -= value
      balance
    }

    def currentBalance = balance
  }

  object Account {
    var Id = 0

    def getId = {
      Id += 1
      Id
    }

    /**
      * 定义apply方法,在外部可以调用
      * val a = Account(99)
      * println(a.id)//输出:1
      * println(a.currentBalance)//输出:99.0
      * @param balance
      * @return
      */
    def apply(balance: Double) = {
      new Account(getId, balance)
    }
  }

}

包:

代码语言:javascript
复制
package com {
  package hash {
    package learn {

      object test1 {
        def execute = {
          println("包的文件不一定要对应的文件夹下")
        }
      }

      package scala {

        object test2 {
          def execute = {
            println("同一文件可以包含多个包")
          }
        }

        object Utils {
          def execute = {
            println("作用域支持嵌套,可以访问上层名称")
          }
        }

        package Chapter7 {

          object test3 {
            def execute = {
              Utils.execute //作用域支持嵌套,可以访问上层名称
            }
          }

        }

      }

    }

  }

}

package com {
  package hash {
    package collection {

    }

    package test {




      object test4 {
        def execute = {
          //默认scala包是被载入的
          //val a = collection.mutable.ArrayBuffer(1,2,3,4) 语句有错,因为是相对路径引入包
          //任意地方可以import可以:
          import _root_.scala.collection.mutable.ArrayBuffer
          val a = ArrayBuffer(1,2,3,4)
          //也可以绝对路径
          val b = _root_.scala.collection.mutable.ArrayBuffer(1,2,3,4)

          println(a == b)
        }
      }

    }

  }

}
//串联式包语句
package com.hash.test{

  object test5 {
    def execute = {
      //这里不会出错,因为如此定义com和com.hash下的都不可见
      val a = collection.mutable.ArrayBuffer(1,2,3,4)
    }
  }
}
代码语言:javascript
复制
package com.hash.test
package scala

object test6 {
  def execute = {
    println("文件顶部")
    println("package com.hash.test")
    println("package scala")
    println("等同于")
    println("package com.hash.test{")
    println("package scala{")
    println("直到文件末尾")
    println("}")
    println("}")
  }
}

包对象:

代码语言:javascript
复制
//由于JVM局限,包不能包含工具函数和常量,利用包对象

package com.hash.learn.scala

package object Chapter7 {
  val defaultName = "HashZhang"
}

package Chapter7 {

  object test7 {
    def execute = {
      println(defaultName)
    }
  }

}

包可见:

代码语言:javascript
复制
package com.hash.learn.scala {
  package Chapter7 {

    object wc {
      private[learn] def description = "I Can See U!";
    }

  }

}

package com.hash {

  import com.hash.learn.scala.Chapter7.wc

  object test8 {
    def execute = {
      //wc.description 在这里不可见
    }
  }
  package learn {

    import com.hash.learn.scala.Chapter7.wc

    object test8 {
      def execute = {
        wc.description
      }
    }

  }

}

重命名和隐藏:

代码语言:javascript
复制
object renameAndHide {
  //将Java中的HashMap重命名,同时导入所有包下类
  import java.util.{HashMap => JavaHashMap, _}
  import scala.collection.mutable.HashMap

  def execute1 = {
    val a = HashMap(1 -> 2)
    val b = new JavaHashMap[Int, Int]()
  }

  import java.util.{HashMap => _}
  import scala.collection.mutable.HashMap

  def execute = {
    val a = HashMap(1 -> 2)
  }

  //scala程序默认隐式引入:
  //import java.lang._
  //import scala._
  //import Predef._
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016/08/04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 单例:
  • 伴生
  • apply方法:
  • 包:
  • 包对象:
  • 包可见:
  • 重命名和隐藏:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档