0
我想做一個輸入類型爲S
的函數,其中S <: ParentClass
和S
也繼承SomeTrait
。我使用S <: ParentClass with SomeTrait
創建了一個解決方案,它編譯得很好,但它拒絕滿足這些條件的輸入。斯卡拉功能,需要擴展類和特徵的類型
abstract class Units[T](v: T) { def getVal = v}
trait Dimension
trait Time extends Dimension
trait Quantity[T <: Dimension]
trait Instance[T <: Dimension] {
def plus[S <: Units[_] with Quantity[T]](q: S)
}
case class Seconds(v: Double) extends Units(v) with Quantity[Time] {
}
case class Timestamp(i: Int) extends Units(i) with Instance[Time] {
def plus[T <: Units[_] with Quantity[Time]](quantity: T) = Timestamp(2345/*placeholder value*/)
}
當我嘗試使用此:
Timestamp(5).plus(Seconds(4))
我得到的錯誤:
<console>:46: error: inferred type arguments [Seconds] do not conform to method plus's type parameter bounds [T <: Units[_] with Quantity[Time]]
Timestamp(5).plus(Seconds(4))
^
<console>:46: error: type mismatch;
found : Seconds
required: T
Timestamp(5).plus(Seconds(4))
獎金的問題:我如何才能與該類型項目的價值,在代碼中顯示?
嗯,我在Databricks測試,也許一些奇怪的神器......我試圖在REPL它確實是typecheck,但它也從'plus'函數返回一個'Unit'。 – spiffman
那麼,你的'加號'函數沒有指定它應該返回的內容。當你沒有指定抽象方法的返回類型時,我猜scala假定你的意思是「Unit」。 –