Scala 对象 (五)

对象

对象:object类型scala类;注意scala中没有static静态关键字,但是可以使用object实现类似操作;

单例对象(singleton)

Scala 中 object对象定义了某个类的单个实例,反编译查看
object对象中有一个静态常量对象,无参构造是私有的,在无参构造中给静态常量对象赋值

package objects

/**
  * 单例对象  在整个JVM容器中只存在一个实例
  * 成员 ---> 静态
  */
object SingletonObject {
  var id: Int = 0
  def idFactory: Int = {
    id += 1
    id
  }

  def main(args: Array[String]): Unit = {
    // 构建单例对象
    val s1 = SingletonObject
    val s2 = SingletonObject
    println(s1)
    println(s2)

    s1.idFactory
    val newId = s2.idFactory
    println(newId)  // 2
  }
}

伴生对象和伴生类

在同一个scala的源文件中,object类名和class类类名一致的,则将object类称为伴生对象,class类称为伴生类;

package objects

/**
  * 伴生类:
  *   语法:可以获取伴生对象的私有成员
  */
class User {
  var uId :Int = User.idFactory

  def sayHi:String = {
    "Hello World"
  }
}

/**
  * 伴生对象
  *   获取伴生类中的属性需要new 创建对象后调用
  */
object User {
  private var id: Int = 0

  def idFactory:Int = {
    id += 1
    id
  }
}

apply和unapply

applyunapply方法是object类中的两个方法;

  • apply方法是一个工厂方法,主要是用以构建创建伴生类
  • unapply方法是一个工厂方法,主要是用以解析伴生类内容
package objects

class Person(var name: String, var age: Int)

object Person {

  // apply方法 用以构建伴生类
  def apply(name: String, age: Int): Person = new Person(name, age)

  // unapply方法 用以解析伴生类内容
  // Option 有值 [Some]或者无值 [None]
  def unapply(p: Person): Option[(String, Int)] = {
    if (p == null) None
    else {
      Some(p.name, p.age)
    }
  }

  def main(args: Array[String]): Unit = {
    Array
    // 传统写法
    val p1 = new Person("zs", 18)
    // apply方法
    val p2 = Person("ls", 20)
    val p3 = Person("ls", 20)

    println(p1)
    println(p2)
    println(p3)

    // 将p3作为unapply方法的参数,解析p3的内容,并且赋值给name和age变量
    var Person(name, age) = p3
    println(name +"\t"+age)
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值