[英]Scala: Can an abstract type be subtype of more than one other type?
給出以下Scala定義
abstract class C {
type T1 <: { def m() : Int }
type T2 <: { def n() : Int }
}
有沒有辦法在C中定義第三種類型,它被限制為T1和T2的子類型? 例如
type T3 <: T1 & T2 // does not compile
在我看來,這部分不起作用的部分原因是我不能確定這不會導致非法約束(例如從兩個類繼承)。 因此,一個相關的問題是,如果我可以約束T1和T2,這將是合法的,例如要求它們都是特征。
這樣做你需要的嗎?
type T3 <: T1 with T2
這不需要T1
和T2
都是特征 - 例如,您可以使用一個特征和一個類來創建有效的實現(哪個是哪個是無關緊要的)。
如果你試圖定義C
的具體子類型,其中T1
和T2
都是類,那么它就不會編譯,所以我不擔心在約束中強制執行它。
當然可以,但是類型交集是用 ,而不是& 。
abstract class C {
type T1 <: { def m() : Int }
type T2 <: { def n() : Int }
type T3 <: T1 with T2
}
class X extends C {
trait T1 {def m(): Int}
class T2 {def n(): Int = 3}
class T3 extends T2 with T1 {def m(): Int = 5}
}
如果T1和T2恰好都是類,那么你將無法進行具體的實現
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.