4
有沒有一種方法來指定一個特徵必須提供一個方法的具體實現?Force Scala特質實現某種方法
鑑於一些混入
class A extends B with C {
foo()
}
該程序可以編譯,如果任一A
,B
,或C
工具foo()
。但是我們怎麼能強制,例如B
包含foo
的實現呢?
有沒有一種方法來指定一個特徵必須提供一個方法的具體實現?Force Scala特質實現某種方法
鑑於一些混入
class A extends B with C {
foo()
}
該程序可以編譯,如果任一A
,B
,或C
工具foo()
。但是我們怎麼能強制,例如B
包含foo
的實現呢?
你可以做到以下幾點:
class A extends B with C {
super[B].foo()
}
如果B
實現foo
這隻會編譯。雖然它(可能)引入了一些不直觀的耦合,但謹慎使用。此外,如果A
重寫foo
,則將調用B
的foo
。
一個恕我直言,有效的使用情況是conflict resolution:
trait B { def foo() = println("B") }
trait C { def foo() = println("C") }
class A extends B with C {
override def foo() = super[B].foo()
}
如果你想確保B
聲明foo
,您可以使用類型歸屬:
class A extends B with C {
(this:B).foo()
}
這隻會編譯如果B
聲明foo
(但它可能在C
或A
)。