美文网首页
Scala学习笔记

Scala学习笔记

作者: leeliang | 来源:发表于2021-01-16 17:57 被阅读0次

    类-Class

    主要记忆点

    1. 会默认给var变量生成get和set方法,比如var age,会默认生成age, age_两个方法
    2. val常量只生成get方法
    3. 若要生成类似Java中的方法,采用@BeanProperty注解到变量上即可
    4. 成员变量如果定义为私有的,则生成的get和set也是私有的
    5. 主构造器:只能有一个,即类名后写上参数。如果没有定义,默认生成一个无参的。
    6. 辅助构造器:名称为this,可以有多个

    对象-Object

    object在scala中可以实现单例模式,静态方法,静态变量等.scala中没有静态方法或静态字段。object可以实现下面功能

    • 存放工具函数或常量
    • 实现不可变实例
    • 单例模式
    1. 单例对象
    object Accounts{
      private var lastNumber = 0
      def newUniqueNumber() = { 
        lastNumber += 1; 
        lastNumber
      }
    }
    

    Accounts的构造器在newUniqueNumber首次调用时执行。不能给对象提供构造器参数。

    1. 伴生对象
      类似java中提供实例方法又提供静态方法的类
    class Account {
      val id = Account.newUniqueNumber()
      private var balance = 0.0
      def deposit(amount: Double): Unit = {
        balance += amount
      }
    }
    object Account { // 伴生对象
      private var lastNumber = 0
      private def newUniqueNumber() = {
        lastNumber += 1
        lastNumber
      }
    }
    

    可以看到类和其伴生对象可以互相访问私有特性,但是必须存在于同一个源文件中。

    1. 枚举
      Scala中没有枚举类型。object继承Enumeration可以实现枚举
    object TrafficLightColor extends Enumeration {
      val Red, Yellow, Green = Value
      // 其中 val Red = Value(0, "Red")
    }
    

    可以看到默认Red的Id为0,name就是Red

    scala可以在一定源文件中,定义包结构,但是还是推荐采用类似Java中的方式,即一个源文件都默认在一个包下。

    1. 包对象
      可以给包定义一个包对象
    package object demo {
      val defaultName = "demo"
    }
    package demo {
      class Test {
        var name = defaultName // 从包对象中获取常量
      }
    }
    

    相关文章

      网友评论

          本文标题:Scala学习笔记

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