我有兩個對象,ObjectA和ObjectB,都與一個方法update()。我想寫一個接受ObjectA或ObjectB(但沒有其他類型)的函數。從概念上講,這就是我想要做的事:接受多種類型的參數在斯卡拉
def doSomething[T <: ObjectA | T <: ObjectB](obj: T) = {
obj.update
}
我知道有其他的方法來解決這個問題(例如,update()方法的結構類型,公共基類等),但我的問題是有可能在Scala中這樣做,如果是這樣的話,語法是什麼?這叫做什麼?
你會怎樣想到這個工作?如果編譯器不知道它是什麼類型,那麼編譯器會知道'T'有什麼方法?如果你的意思是確保你的班級有'update',那麼這就是結構類型的用途。 – dhg 2012-03-08 00:09:23
可能的重複[是否Scala有「類型分離」(聯合類型)?](http://stackoverflow.com/questions/3508077/does-scala-have-type-disjunction-union-types)。接受的答案和下一個排名最高的指向我的unboxed union編碼直接解決了這個問題。 – 2012-03-08 00:28:10
@dhg,如果ObjectA和ObjectB都有一個方法update(),並且type T擴展了這些類中的一個,它可以知道類型T有一個update()方法。 – 2012-03-08 06:28:19