scala-apply和unapply方法

                 scala-apply和unapply方法+private关键字

 

一、scala-apply和unapply方法

package day02

/**
  * 1,apply 方法通常称为注入方法,在伴生对象里做一些初始化操作
  * 2,apply 方法的参数列表不需要和构造器的参数统一
  * 3,unapply 方法通常称为提取方法,使用unapply方法来提取固定数量的对象。
  *         注意:其返回为一个序列(option),内部生成了一个Some对象,来存放一些指。
  * 4,appay和unapply方法会被隐式调用。
  *
  *
  * @param name
  * @param age
  * @param faceValue
  */
class ApplyDemo(val name:String,var age:Int,var faceValue:Int){

}

object ApplyDemo{

  //注入方法,初始化类
  def apply(name: String,age: Int,faceValue: Int): ApplyDemo = new ApplyDemo(name, age,faceValue)

  def unapply(applyDemo: ApplyDemo): Option[(String, Int, Int)] = {

    if(applyDemo==null){
      None
    }else{
      Some(applyDemo.name,applyDemo.age,applyDemo.faceValue)
    }
  }
}

object ApplyTest{

  def main(args: Array[String]): Unit = {
    //该下面没有用new关键字,直接用类声明。此时就是调用了注入 apply 方法
    val applyDemo = ApplyDemo("小明",12,90)

    applyDemo match{
      case ApplyDemo("小明",age,90) =>println(s"age:$age")
      case _=>println("no match nothing")

    }

  }

}

二、private关键字

package day02

/**
  * 1,类名前可以控制 包的访问权限
  * 2,构造器参数列表加private 是指伴生对象 的权限,只有伴生对象才能访问
  */
private [day02] class PrivateDemo(val gender:Int,val address:String) {

  private val name = "Tom"

  //表示只在本类访问
  private [this] var age = 23


  private def functionDemo: Unit ={

    println(s"Tom age is $age")

  }
}
//伴生对象
object PrivateDemo{

  def main(args: Array[String]): Unit = {
    val privateDemo = new PrivateDemo(0,"莱芜")
    privateDemo.functionDemo
  }
}
//非伴生对象 --无法访问
object PrivateDemo02{
  def main(args: Array[String]): Unit = {
    val privateDemo = new PrivateDemo(0,"fwa")
//    privateDemo.functionDemo
  }
}

欢迎订阅关注公众号(JAVA和人工智能)

                                                           获取更多免费书籍、资源、视频资料

             scala-apply和unapply方法

文章超级链接:

 1,分布式系统详解--基础知识(概论)

 2,分布式系统详解--基础知识(线程)

 3,IDEA和Eclipse的比较

 4,IntelliJ IDEA(最新)安装-**详解--亲测可用

 5,scala-构造器-辅助构造器-伴生对象-单例对象