Scala学习笔记
2021-01-16 本文已影响0人
leeliang
类-Class
主要记忆点
- 会默认给var变量生成get和set方法,比如var age,会默认生成age, age_两个方法
- val常量只生成get方法
- 若要生成类似Java中的方法,采用@BeanProperty注解到变量上即可
- 成员变量如果定义为私有的,则生成的get和set也是私有的
- 主构造器:只能有一个,即类名后写上参数。如果没有定义,默认生成一个无参的。
- 辅助构造器:名称为this,可以有多个
对象-Object
object在scala中可以实现单例模式,静态方法,静态变量等.scala中没有静态方法或静态字段。object可以实现下面功能
- 存放工具函数或常量
- 实现不可变实例
- 单例模式
- 单例对象
object Accounts{
private var lastNumber = 0
def newUniqueNumber() = {
lastNumber += 1;
lastNumber
}
}
Accounts的构造器在newUniqueNumber
首次调用时执行。不能给对象提供构造器参数。
- 伴生对象
类似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
}
}
可以看到类和其伴生对象可以互相访问私有特性,但是必须存在于同一个源文件中。
- 枚举
Scala中没有枚举类型。object继承Enumeration可以实现枚举
object TrafficLightColor extends Enumeration {
val Red, Yellow, Green = Value
// 其中 val Red = Value(0, "Red")
}
可以看到默认Red的Id为0,name就是Red
包
scala可以在一定源文件中,定义包结构,但是还是推荐采用类似Java中的方式,即一个源文件都默认在一个包下。
- 包对象
可以给包定义一个包对象
package object demo {
val defaultName = "demo"
}
package demo {
class Test {
var name = defaultName // 从包对象中获取常量
}
}