在 kotlin 中有“委托裝飾”模式。有沒有辦法在 Scala 中以優雅的方式實作它。
這是一個 kotlin 代碼示例:
interface Doo{
fun a(): Unit
fun b(): Unit
}
class Goo:Doo {
override fun a() {
println("goo a")
}
override fun b() {
println("goo b")
}
}
class Moo(doo: Doo):Doo by doo{
override fun b() {
println("mooooooo")
}
}
fun main() {
val m = Moo(Goo())
m.a();m.b()
}
uj5u.com熱心網友回復:
據我所知,在 Scala 2 中,您無法做到這一點。然而,在 Scala 3 中可以使用export:
trait Foo {
def a: Int
def b: String
}
trait Bar {
def a: Int
}
def decorateAsFoo(bar: Bar): Foo = new Foo {
export bar._ // export all bar methods/values/types in this Foo impl
override def b: String = "decorated"
}
decorateFoo(new Bar { override def a: Int = 10 })
(見斯卡斯蒂)
如您所見,export您甚至不必創建單獨的名稱class(盡管您可以根據需要),也不必在裝飾者和被裝飾者之間建立任何型別的子型別關系,只要結果將具有所有必要的手動匯出或實施的定義。
在 Scala 2 中(據我所知),您可以指望的最好的方法是通過Chimney之類的庫將一種資料型別轉換為具有相似架構的另一種資料型別。我不知道有任何庫在存盤行為的類之間進行這種轉換。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/413844.html
標籤:
上一篇:如何為復雜型別的列分配空值?
