美文网首页
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