美文网首页
Scala-12.对象(object)

Scala-12.对象(object)

作者: 悠扬前奏 | 来源:发表于2019-07-13 23:05 被阅读0次
  • object在Scala中是一个关键词,同时对象也是一个概念,即类的一个实例

  • asInstanceOf方法可以将一个实例强制转换为另一个期望的类型。

  • 用scala的classOf方法来代替Java的.class。可以得到对象所属的类

  • 创建启动入口有两种方式,其实两种方法都是从object启动而不是class:

    • 继承App特质的object:
      • 该特质使用DelayedInit功能实现,也就是object的字段在main方法执行前都没有被初始化
      • 一般不需要覆盖main方法:其目的是将整个类编程main方法。除非是确实有意为之,选择去覆盖
    • 定义一个object,实现main方法
  • 用object关键字创建的对象是Singleton的,对象的方法定义在obejct而不是类中,可以像Java中调用静态方法

  • 可以在类中定义非静态的实例成员,然后在同一个文件中再定义一个类相同名字的“静态”成员对象。这个对象被称为伴生类。

    • 和Java静态类的区别在于:
      • 在同一文件中定义对象和类,并赋予相同的名字
      • 在对象内定义“静态”成员
      • 在类内定义非静态成员
    • 类和其伴生类可以互相访问对方的私有成员变量。
  • 将要在所有类中共享的代码放在一个包的包对象中,可以在不引入类或者对象的前提下,让函数、字段和其他代码在包级别可用。

  • 通过以下两种办法可以不用new关键字创建类的实例,使代码更简洁:

    • 为类创建半生类,并在伴生类内按照所需的构造函数签名定义一个apply方法。
      • 本质上是类的构造函数:
class Person {
    var name: String = _
}

object Person {
    def apply(name: String): Person = {
        val p = new Person
        p.name = name
        p
    }
}
  • 将类定义为case类,本质上还是在应为case类为伴生类中生成了一个apply方法:
case class Person(var name:String)
  • 如果需要为在通过apply方法创建多个构造函数,可以在提供构造函数签名的伴生类中定义多个apply方法。

  • case被创建时同事会为默认构造函数实现访问器(选择生成)和取值器(这回产生很多隐藏的代码膨胀)

  • 通过apply方法可以在Scala中实现工厂方法。

相关文章

网友评论

      本文标题:Scala-12.对象(object)

      本文链接:https://www.haomeiwen.com/subject/lnpjkctx.html