scala枚舉
枚舉:Scala不支持enum關鍵字,通過繼承Enumeration類實現枚舉
枚舉通常用來定義已知數量的常量,比如月份,星期,季節等等
定義一個星期的枚舉
並定義一個打印所有值的方法
我們調用運行看一下,直接打印的枚舉中的變量值
打印語句可以簡化
調用
我們看輸出的值
可以直接調用枚舉值
withName也可以直接獲取
有一個id 的屬性
toString
直接通過下標
如果我們改變Tue的值,查看id的變化,就能發現id的值會改變,後面使用的值id也發生了變化
總結上面說明:
枚舉值 說明
Enum.Mon 獲取枚舉值
Enum.Mon.id 獲取枚舉值ID
Enum.Mon.toString 獲取枚舉值名稱
Enum.values.values 返回所有的枚舉值的集合
Enum(2) 通過 id 獲取枚舉值(調用Enumeration.apply)
Enum.withName("2") 通過名稱獲取枚舉值
有一些簡單的用法
檢測是否存在此枚舉值
def checkExists(day:String) = this.values.exists(_.toString==day)
判斷是否是工作日
def isWorkingDay(day:WeekDay) = ! ( day==Sat || day == Sun)
調用
注意這種使用
case class
Scala中一種特殊的class,叫做 case class
case class就是class和object的一個整合,在編譯的過程中會自動的生成class和object的相關代碼,並且在object中生成一個和class主構造函數同參數列表的apply方法,可以簡化寫object的過程
case class中默認的屬性修飾符為 public val ,但是可以改變的,跟普通函數的定義是一樣的,沒有區別
case class中的屬性最多允許22個,跟元組中是一樣的
一般比較常用於模式匹配
用法簡單示例
trait(特質)
scala中沒有interface的概念,一般情況我們把trait當作Java的接口來使用
區別:
1. trait可以包含已經實現的方法或者屬性(特質和接口的區別)
2. 和抽象類相比,一個類可以繼承或者實現多個trait(特質和抽象類的區別)
scala中的class是單繼承的,和Java一樣,一個class的父類只有一個但是可以實現多個trait
trait是多繼承的
scala中不支持implements關鍵字,使用extends和with管理繼承/實現的代碼邏輯
extends表示繼承或者實現
with用於多trait的繼承過程中
示例一:
示例二:
示例三:
閱讀更多 分享電腦學習 的文章