Scala基礎學習九之枚舉和Trait瞭解

scala枚舉

枚舉:Scala不支持enum關鍵字,通過繼承Enumeration類實現枚舉

枚舉通常用來定義已知數量的常量,比如月份,星期,季節等等

定義一個星期的枚舉

Scala基礎學習九之枚舉和Trait瞭解

並定義一個打印所有值的方法

Scala基礎學習九之枚舉和Trait瞭解

我們調用運行看一下,直接打印的枚舉中的變量值

Scala基礎學習九之枚舉和Trait瞭解

打印語句可以簡化

Scala基礎學習九之枚舉和Trait瞭解

調用

Scala基礎學習九之枚舉和Trait瞭解

我們看輸出的值

Scala基礎學習九之枚舉和Trait瞭解

可以直接調用枚舉值

Scala基礎學習九之枚舉和Trait瞭解

withName也可以直接獲取

Scala基礎學習九之枚舉和Trait瞭解

有一個id 的屬性

Scala基礎學習九之枚舉和Trait瞭解

toString

Scala基礎學習九之枚舉和Trait瞭解

直接通過下標

Scala基礎學習九之枚舉和Trait瞭解

如果我們改變Tue的值,查看id的變化,就能發現id的值會改變,後面使用的值id也發生了變化

Scala基礎學習九之枚舉和Trait瞭解

總結上面說明:

枚舉值 說明

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)

Scala基礎學習九之枚舉和Trait瞭解

調用

Scala基礎學習九之枚舉和Trait瞭解

注意這種使用

Scala基礎學習九之枚舉和Trait瞭解

case class

Scala中一種特殊的class,叫做 case class

case class就是class和object的一個整合,在編譯的過程中會自動的生成class和object的相關代碼,並且在object中生成一個和class主構造函數同參數列表的apply方法,可以簡化寫object的過程

case class中默認的屬性修飾符為 public val ,但是可以改變的,跟普通函數的定義是一樣的,沒有區別

case class中的屬性最多允許22個,跟元組中是一樣的

一般比較常用於模式匹配

用法簡單示例

Scala基礎學習九之枚舉和Trait瞭解

Scala基礎學習九之枚舉和Trait瞭解

trait(特質)

scala中沒有interface的概念,一般情況我們把trait當作Java的接口來使用

區別:

1. trait可以包含已經實現的方法或者屬性(特質和接口的區別)

2. 和抽象類相比,一個類可以繼承或者實現多個trait(特質和抽象類的區別)

scala中的class是單繼承的,和Java一樣,一個class的父類只有一個但是可以實現多個trait

trait是多繼承的

scala中不支持implements關鍵字,使用extends和with管理繼承/實現的代碼邏輯

extends表示繼承或者實現

with用於多trait的繼承過程中

示例一:

Scala基礎學習九之枚舉和Trait瞭解

Scala基礎學習九之枚舉和Trait瞭解

Scala基礎學習九之枚舉和Trait瞭解

示例二:

Scala基礎學習九之枚舉和Trait瞭解

Scala基礎學習九之枚舉和Trait瞭解

示例三:

Scala基礎學習九之枚舉和Trait瞭解

Scala基礎學習九之枚舉和Trait瞭解

Scala基礎學習九之枚舉和Trait瞭解


分享到:


相關文章: