[英]What kind of impact does applying all these Scala traits have at runtime?
想象一下:
val myObject = if(someCondition) {
new Whatever with Trait1
} else if(otherCondition) {
new Whatever with Trait2 with Trait3 with Trait4
} else {
new Whatever with Trait5
}
myObject
object 是在運行時“組合”的,還是 scala 編譯器足夠聰明,可以在編譯時生成適當的代碼? 如果您有多個應用上述代碼中的特征的地方,它將對代碼產生什么樣的性能影響?
它是在編譯時組成的
特征將作為接口添加到結果類型,並且來自這些特征的任何具體方法將(通常)被完整地復制到 class。
有時,編譯器可能必須通過轉發器向 static 方法提供具體實現,但通常情況並非如此。
Scala 將創建三個匿名類(除了最后一個條件是語法錯誤)。
注意:這些類將使用它們在 scope 中定義的順序來命名。 所以... OuterClass$anon$1 -> 3. 請避免在任何長期 Java 序列化中使用這些匿名類,因為這會鎖定代碼中匿名類的順序。
除此之外,這是一個很棒的便利功能!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.