2016-06-09 73 views
2

如何編寫數據類型的簡寫?例如, 。 可以說,而不是List[Integer],我寧願鍵入Integers如何在Scala中編寫數據類型的簡寫

,而不是這個

def processNumbers(input:List[Integer]):List[Integer] = ... 

def processNumbers(input:Integers):Integers = ... 

這可能嗎?

感謝

回答

4

是的,你可以用type alias做到這一點。

type Integers = List[Int] // scala.Int is preferred over java.lang.Integer 

這就是說,這不是一個真正的好用。 List[Int]對其他scala開發人員來說非常清楚,您的類型Integers不會提供額外的信息,因此會隨着時間的推移而降低代碼的可讀性。

一個使用類型別名會雖然提高代碼的可讀性會是這樣的

type UserId = Int 
def processUsers(ids: List[UserId]): Foo 

在這種情況下,它提供額外的信息給讀者VS

def processUsers(ids: List[Int]): Foo 

使用那種類型的別名還可以讓您通過將類型別名的定義更改爲value class,逐漸使您的代碼更具類型安全性。

case class UserId(value: Int) extends AnyVal 

你不會需要改變的已經有「UserId」什麼方法簽名,但是這將讓編譯器幫助你確保你不這樣做

val ids: List[Int] = getBlogPostIds() 
val foo = processUsers(ids) // Oops, those Ints are for blog posts, not users 

使用值類方法,像這樣的錯誤成爲編譯器錯誤。它廣泛使用它在編寫正確的代碼時增加了很多指導。

val ids: List[BlogPostId] = getBlogPostIds 
val foo = processUsers(ids) // Compile error; BlogPostId != UserId 
+0

謝謝Daenyth –