簡體   English   中英

Scala:抽象類型可以是多個其他類型的子類型嗎?

[英]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

這不需要T1T2都是特征 - 例如,您可以使用一個特征和一個類來創建有效的實現(哪個是哪個是無關緊要的)。

如果你試圖定義C的具體子類型,其中T1T2都是類,那么它就不會編譯,所以我不擔心在約束中強制執行它。

當然可以,但是類型交集是 ,而不是

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM