scala 编程(其七)静态类与伴生对象applay与unapplay

object 静态类:
1,scala 之中是没有静态方法和静态字段的,可以使用 object 关键字加类名的语法结构来实现的
2,工具类,存放常量和工具方法
3,实现单例模式
package day01

import scala.collection.mutable.ArrayBuffer
object Test12 {
  def main(args: Array[String]): Unit = {
      val fa= SessionFactu
    println(fa.getSession)
    println(fa.getSession.size)
    println(fa.getSession(0))
    println(fa.removesession)
  }
}
object SessionFactu{
  println("session get")
  var i = 5
  private val session =new ArrayBuffer[Session]()
  while (i>0){
    session += new Session
    i -= 1
  }
  def getSession = session
  def removesession :Unit={
    val s = session(0)
    session.remove(0)
    println("session had remove")
  }
}

class Session{

}
伴生对象:
1,与类名相同并且用object修饰的对象叫做伴生对象,比如 List 列表就是伴生对象
2,类对象其伴生对象之间可以互相访问方法与属性
package day01
class Test13 {
    private var name = "tom"
    Test13.age = 12
    // 更改伴生对象属性!
    println(Test13.age)
}
object Test13{
    var age = 13
    def main(args: Array[String]): Unit = {
        val tel = new Test13
        // 伴生对象更改类对象属性!
        tel.name = "jeek"
        println(tel.name)
    }
}
伴生对象 applay 与 unapplay:
1, applay 注入方法,在伴生对象之中做一些初始化的操作
2, applay 的参数列表可以和构造器参数列表不统一
3,unappplay 常为提取方法,用来提取固定数量的对象
4,会返回一个序列(Option),内部生成一个 some对象,
5,applay 与 unappplay 会被隐式调用
package day01
class Test13(val name:String,val age:Int,val face:Int) {

}
object Test13{
  // 注入方法,在伴生对象之中,applay 相当于初始化方法!
  // 可以和构造器参数列表不统一
  def apply(name:String,age:Int,face:Int,gender:Int) =
    new Test13(name,age,face)

  // 使用 unapplay 用来提取固定数量的对象!
  def unapply(test13: Test13): Option[(String,Int,Int)] = {
    if (test13 == null){
        None
    }else{
        // unapply 提取的对象封装给 Some 之中
        Some(test13.name,test13.age,test13.face)
    }
  }
}
object test{
  def main(args: Array[String]): Unit = {
      // 创建实例 执行的是 applay 的方法!
      val test13 = Test13("abc",21,0,34)
      test13 match {
          // 此时隐式调用的是 unapplay方法!
        case Test13("abc",age,face) => println(s"age: $age")
        case _ => println("no mavhe")
      }
  }
}

 

posted @ 2019-03-09 16:46  十七楼的羊  阅读(528)  评论(0编辑  收藏  举报