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和人工智能)
获取更多免费书籍、资源、视频资料
文章超级链接: