[英]What does “case class extends trait” mean in Scala?
我正在理解我現有的項目,但我無法理解的幾件事:
trait PeriodA {
def start: Long
def stop: Long
def description: String
def manageTo: String
}
case class PeriodEntity(
start: Long,
stop: Long,
description: String,
manageTo: String)
extends PeriodA
你能解釋一下發生了什么嗎?
一步步:
trait PeriodA {
– trait PeriodA {
定義(大致是一個接口–為了進一步理解,請閱讀spec )
def start: Long def stop: Long def description: String def manageTo: String
–定義了“待命”特征的特性。 您可以將它們視為Java getFieldName
函數。
case class PeriodEntity
“案例類”的case class PeriodEntity
定義比一般的定義稍微復雜一些。 簡而言之,該定義使編譯器向該定義的每個所謂的“元素”(字段)隱式添加val
前綴。 它還使用apply/unapply
函數對定義了伴隨對象,這在您要使用模式匹配時很方便,但這不在當前主題之內。 案例類別規范
start: Long, stop: Long, description: String, manageTo: String
–構造函數參數和類字段的定義,稱為“元素”。 至於編譯器使用val
前綴隱式標記元素,則應將它們視為不可變的。 如前所述,可以將它們視為get訪問器。
extends PeriodA
-宣稱類PeriodEntity
混入(實現) PeriodA
接口。 只要編譯器將類元素隱式地視為val,就無需顯式實現或重寫抽象PeriodA
方法-編譯器會將元素視為您的默認實現。 感謝您讓我理解我,我想分享我的理解,
trait PreridA
只是一個接口有4種get方法。
case class PeriodEntity extends PeriodA
-PeriodEntity應該具有4個get方法,如PeriodA所述。 如果刪除了PeriodEntity中的任何文件,則將獲得編譯異常。 簡單來說,它就像一個類實現了一個接口。
對於這類誤解,我有解決方案。 為此,您應該具有Java的基本知識。
或者,cd <..> \\ target \\ scala-2.11 \\ classes運行
javap package.Employee
您將在控制台中看到Java代碼。
僅當您在實時項目上工作時才需要1,2個步驟,實際的項目代碼包含很多邏輯。 如果您可以理解,則可以省略1步和2步。
因此,您可以輕松了解Scala代碼的確切含義。
這看起來很麻煩,但是不會花費很多時間。 並使其理解自己,而不是別人解釋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.