Step into Scala - 12 - 对象与枚举

目录

摘要

静态方法,单例对象使用及作用,伴生对象,扩展类的对象,应用程序对象,枚举

对象与枚举

对象

单例对象
  • 与类不同,单例对象使用 object 进行声明
  • Scala 没有静态属性和方法,需要使用单例对象来实现类似的功能。
  • 对象的构造器不能提供构造器参数,在第一次使用时会被初始化。
object Singleton {
  private var num = 0

  def sequence() = {
    num += 1
    num
  }
}

Singleton.sequence()

单例对象可以用于提供常量及共享不可变对象。

伴生对象
  • 单例对象和类可以拥有相同名字,此时也称此单例对象为伴生对象。
  • 伴生对象可以用于让一个类即拥有实例化方法又有静态方法。
  • 伴生对象必须与同名类位于同一源文件中。
  • 伴生对象与类可以互相访问各自的私有成员。
class Companion(private var balance: Int = 0) {
  val id = Companion.sequence() //访问伴生对象的私有方法
}

object Companion {
  private var num = 0

  private def sequence(): Int = {
    num += 1
    num
  }

  def getInfo(comp: Companion): String = {
    "balance is " + comp.balance    //访问类的私有属性
  }
}
扩展类的对象

可用于实现类的可共享的默认对象

基类

abstract class UndoableAction(val description: String) {
  def undo

  def redo
}

扩展对象

object DoNothing extends UndoableAction("Do nothing") {

  override def undo: Unit = ???

  override def redo: Unit = ???
}

//使用默认对象
val actions = Map("open" -> DoNothing, "save" -> DoNothing)
应用程序对象

应用程序对象即对象拥有 main() 方法或继承 App 类。该对象是一个应用的入口,可以通过 args 获得命令行参数。

object Hello extends App {

  println("Hello World")

  if (args.length > 0) {
    println("args:" + args(0))
  } else {
    println("no args")
  }
}

枚举

  • Scala 并没有枚举类型,而是通过对象继承 Enumeration 类实现枚举功能。
  • 每次调用 Value 方法时都会自动生成一个枚举实例。Value 构造器为 (), (id, name)(name)

构造枚举

object TrafficColor extends Enumeration {

  val RED = Value(0, "stop")
  val YELLOW = Value(10)
  val GREEN = Value("go")
  val BLUE = Value
}

使用枚举

//直接获得枚举
var red = TrafficColor.RED

//通过索引获得枚举
red = TrafficColor(0)

//通过 name 获得枚举
red = TrafficColor.withName("stop")

red.toString    //返回  name
red.id  //返回 id
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值